Новая статья: Графические интерфейсы — IV Многооконный режим и система приоритетов (Глава 2)

 

Опубликована статья Графические интерфейсы IV: Многооконный режим и система приоритетов (Глава 2):

В этой статье мы расширим реализацию библиотеки до возможности создавать многооконные интерфейсы для своих MQL-приложений. Кроме этого, разработаем систему приоритетов на нажатие левой кнопкой мыши на графических объектах. Это нужно, чтобы не столкнуться с проблемами, когда элементы управления неожиданно не отвечают на действия пользователя.

Многооконный режим

Рассмотрим многооконный режим графического интерфейса разрабатываемой библиотеки. До сих пор в перечислении ENUM_WINDOW_TYPE было предусмотрено два идентификатора для главного (W_MAIN) и диалогового (W_DIALOG) окна. Использовался только один режим, то есть, режим одного окна. Ниже мы внесем дополнения, после чего для включения многооконного режима достаточно будет просто создать и добавить в базу нужное количество форм для элементов управления.

В главном классе обработки событий CWndEvents нужно создать поле для сохранения индекса текущего активного окна:

class CWndEvents : public CWndContainer
  {
protected:
   //--- Индекс активного окна
   int               m_active_window_index;
  };

Давайте разберёмся, как будет определяться индекс активного окна. Например, пользователь назначил какой-нибудь кнопке открытие диалогового окна (W_DIALOG). Когда кнопка нажимается, генерируется пользовательское событие ON_CLICK_BUTTON, которое можно отследить в обработчике событий CProgram::OnEvent() пользовательского класса. Здесь же используем метод CWindow::Show() той формы, которую нужно показать. В текущей реализации библиотеки этого будет недостаточно, поэтому далее внесём необходимые дополнения.

Рис. 2. Структура библиотеки на текущей стадии разработки.

Автор: Anatoli Kazharski