Обсуждение статьи "Графические интерфейсы 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

 

Анатоль, косячок заметил - решил поглядеть примеры, и сразу же увидел, что если окно прижато к правому краю и включен показ подсказок, то эти самые подсказки уходят за правый край экрана. Скорректировал бы ты координату х при выходе тултипа за экран.

И ещё в кач-ве предложения: в меню, в пунктах меню с выпадающими подменю (не знаю как правильно их назвать), в тех, где есть стрелочка вправо, указывающая на то, что откроется ещё один пункт, мне кажется лучше сделать открытие при наведении курсора на такой пункт меню (а ля виндоус). Ну или сделать параметром: либо новый пункт открывается при наведении, либо по щелчку (как сейчас)

 
Artyom Trishkin:

Анатоль, косячок заметил - решил поглядеть примеры, и сразу же увидел, что если окно прижато к правому краю и включен показ подсказок, то эти самые подсказки уходят за правый край экрана. Скорректировал бы ты координату х при выходе тултипа за экран.

И ещё в кач-ве предложения: в меню, в пунктах меню с выпадающими подменю (не знаю как правильно их назвать), в тех, где есть стрелочка вправо, указывающая на то, что откроется ещё один пункт, мне кажется лучше сделать открытие при наведении курсора на такой пункт меню (а ля виндоус). Ну или сделать параметром: либо новый пункт открывается при наведении, либо по щелчку (как сейчас)

Сделаем. Исправлениями и доработками займёмся после того, как полностью опубликуется первая версия библиотеки. Нужно зафиксировать текущий результат.

Составим потом список того, что нужно сделать, определим приоритеты и можно попробовать отдельной статьёй опубликовать. 

 

Анатолий, а возможно ли сделать так, чтобы можно было с главной панели открыть два окна так, чтобы все три окна оставались активными?

Т.е,: имеем основную панель, на ней есть кнопки для открытия двух дополнительных панелей, у каждой из этих дополнительных панелей есть свой набор кнопок и всего прочего.

Нажали на главной панели кнопку1 - открылась панель1. При этом на главной панели кнопки остаются активными и на панели1 они тоже активные.

Нажали на главной панели кнопку2 при уже открытой панели1 - открылась панель2. При этом и на главной панели, и на панели1, и на панели2 все их кнопки остаются активными.

Это позволит иметь инерфейс с перемещаемыми активными панелями, каждая из которых выполняет свои функции.

Сейчас есть возможность иметь только одну активную панель в одно и то же время.

 
Artyom Trishkin:

Анатолий, а возможно ли сделать так, чтобы можно было с главной панели открыть два окна так, чтобы все три окна оставались активными?

...

На текущий момент такой возможности нет. Но в планах есть.

В первую очередь хочу поработать над элементами управления. Там ещё много всего нужно доработать.

 
Anatoli Kazharski:

На текущий момент такой возможности нет. Но в планах есть.

В первую очередь хочу поработать над элементами управления. Там ещё много всего нужно доработать.

Ясно, жаль. С нетерпением ждём ;)
Причина обращения: