Сообщения, поступающие от меню 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Сообщения, поступающие от меню



Меню посылает сообщения в функцию создавшего его окна.

Сообщение WM_INITMENU посылается перед отображением меню и может быть использовано для инициализации. Сообщение WM_COMMAND посылается после того, как пользователь выберет одну из активных строк меню. Системное меню посылает в окно приложения сообщение WM_SYSCOMMAND, которое обычно не обрабатывается приложением (передается функции DefWindowProc). В процессе выбора строки из меню, когда курсор перемещается по строкам меню, функция окна, создавшего меню, получает сообщение WM_MENUSELECT. Перед инициализацией временного меню функция окна получает сообщение WM_INITMENUPOPUP.

Из всех этих сообщений наибольший интерес представляют сообщения WM_INITMENU, WM_INITMENUPOPUP, WM_COMMAND, WM_SYSCOMMAND.

Сообщение WM_INITMENU

Сообщение WM_INITMENU посылается окну, создавшему меню, в момент отображения меню. Это происходит, когда вы нажимаете на строку в полосе меню или активизируете временное меню при помощи клавиатуры.

Вместе с этим сообщением в параметре wParam передается идентификатор активизируемого меню. Параметр lParam не используется.

Если приложение обрабатывает сообщение WM_INITMENU, соответствующий обработчик должен вернуть нулевое значение. Обработка может заключаться в активизации или деактивизации строк меню, изменении состояния строк (отмеченное галочкой или не отмеченное) и т. п. Немного позже мы опишем функции, предназначенные для динамического изменения внешнего вида и состояния меню.

Сообщение WM_INITMENUPOPUP

Сообщение WM_INITMENUPOPUP посылается окну, когда операционная система Windows готова отобразить временное меню. Младшее слово параметра lParam содержит порядковый номер временного меню в меню верхнего уровня, старшее слово содержит 1 для системного меню или 0 для обычного меню.

Это сообщение можно использовать для активизации или блокирования отдельных строк временного меню.

Сообщение WM_COMMAND

Сообщение WM_COMMAND, как мы уже говорили, посылается функции окна приложения, создавшего меню, когда вы выбираете нужную вам строку. Параметр wParam содержит идентификатор строки, определенный в шаблоне меню.

Задача функции окна, обрабатывающей сообщения от меню, заключается в проверке значения параметра wParam и выполнении соответствующей функции.

Сообщение WM_SYSCOMMAND

Сообщение WM_SYSCOMMAND приходит в функцию окна приложения, когда пользователь выбирает строку из системного меню. Параметр wParam, как и для сообщения WM_COMMAND, содержит идентификатор строки меню, в данном случае, идентификатор строки системного меню. Параметр lParam не используется (за исключением идентификатора SC_HOTKEY).

Приведем список идентификаторов с кратким описанием.

Идентификатор Описание
SC_CLOSE Удаление окна (строка "Close")
SC_HOTKEY Активизация окна, связанного с комбинацией клавиш, определенной приложением. Младшее слово параметра lParam содержит идентификатор активизируемого окна
SC_HSCROLL Свертка по горизонтали
SC_KEYMENU Выбор из меню при помощи комбинации клавиш
SC_MAXIMIZE или SC_ZOOM Максимизация окна (строка "Maximize")
SC_MINIMIZE или SC_ICON Минимизация окна (строка "Minimize")
SC_MOUSEMENU Выбор из меню при помощи мыши
SC_MOVE Перемещение окна (строка "Move")
SC_NEXTWINDOW Переключение на следующее окно
SC_PREVWINDOW Переключение на предыдущее окно
SC_RESTORE Восстановление нормального положения и размера окна
SC_SCREENSAVE Запуск приложения, предназначенного для предохранения экрана дисплея от преждевременного выгорания (screen-saver application), определенного в разделе [boot] файла system.ini
SC_SIZE Изменение размера окна (строка "Size")
SC_TASKLIST Запуск или активизация приложения Task Manager
SC_VSCROLL Свертка по вертикали

При анализе параметра wParam учтите, что младшие четыре бита этого параметра могут принимать любые значения и должны игнорироваться:

if((wParam & 0xfff0) == SC_SIZE)

{

return 0;

}

Скоро мы расскажем вам о том, как можно добавлять строки в системное меню. При добавлении строк в системное меню вы должны указывать идентификатор строки. Этот идентификатор (с учетом сказанного выше относительно младших четырех битов) вы получите в параметре wParam сообщения WM_SYSCOMMAND при выборе добавленной вами строки.

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

 

Диалоговые панели

Обычно для объединения органов управления используются временные (pop-up) окна, созданные на базе предопределенного внутри Windows класса окон - класса диалоговых панелей (dialоg window class). На поверхности такого окна располагаются дочерние окна - органы управления. Функция окна для класса диалоговых панелей, определенная в Windows, выполняет практически всю работу, необходимую для организации взаимодействия органов управления с приложением.

Для создания каждого органа управления мы вызывали функцию CreateWindow, которой требовалось указывать расположение и размеры органов управления. Поэтому при необходимости внесения изменений во внешний вид приложения приходилось изменять исходные тексты. В функцию родительского окна приходили все сообщения и извещения от всех органов управления. Большие проблемы возникали при необходимости передачи фокуса ввода от одного органа управления к другому - функция родительского окна должна была управлять передачей фокуса ввода и организовывать взаимодействие органов управления самостоятельно.

Диалоговые панели значительно упрощают использование органов управления, так как функция окна, соответствующая классу диалоговых панелей и расположенная внутри Windows, обеспечивает как взаимодействие органов управления между собой, так и их взаимодействие с приложением. В частности, эта функция обеспечивает передачу фокуса ввода от одного органа управления к другому при помощи клавиши <Tab> и клавиш перемещения курсора <Up> и <Down>, выполняет обработку сообщений от клавиш <Enter> и <Esc>.

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

Первый способ предполагает включение в файл ресурсов приложения текстового описания шаблона диалоговой панели. Это описание можно создать при помощи любого текстового редактора:

Второй способ размещения органов управления на поверхности диалоговой панели предполагает использование специального редактора диалогов, такого как Borland Resource Workshop или Microsoft Dialog Editor. Эти редакторы позволяют нарисовать диалоговую панель и сохранить ее текстовое описание в файле ресурсов приложения.

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

Создание диалоговой панели

Диалоговая панель обычно представляет собой временное (pop - up) окно, хотя допустимо использовать и перекрывающиеся (overlapped) окна. Для создания диалоговой панели вам не требуется вызывать функцию CreateWindow, так как в программном интерфейсе Windows определены функции, специально предназначенные для создания диалоговых панелей.

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

Помимо шаблона, перед созданием диалоговой панели вам следует определить специальную функцию диалога, в которую будут поступать сообщения от функции окна диалоговой панели (которые, в свою очередь, поступают туда от органов управления). Функция диалога является функцией обратного вызова и должна быть описана с использованием ключевого слова _export. Вместо этого имя функции обратного вызова можно занести в раздел EXPORTS файла определения модуля.

Итак, для создания диалоговой панели вы должны предпринять следующие действия:

создать шаблон диалога;

определить функцию диалога;

вызвать одну из функций создания диалога.

Создание шаблона диалога

Для создания шаблона диалога лучше всего воспользоваться редактором диалога Borland Resource Workshop или Microsoft Dialog Editor. Опишем процесс создания диалога с помощью редактора диалога, входящего в состав приложения Resource Workshop.



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 146; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.186.72 (0.01 с.)