русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Сообщения меню


Дата добавления: 2013-12-23; просмотров: 1135; Нарушение авторских прав


Использование меню

Создание описания меню, нужно указать имя меню в структуре класса окна; тогда указанное вами меню будет загружаться, отображаться и обслуживаться Windows автоматически:

 

W. lpszMenuName = "menu";

 

Другой («динамический») способ работы с меню в приложении заключается в том, что вы загружаете меню в память, вызывая функцию LoadMenu:

 

W.lpszMenuName = LoadMenu (hInstance, "menu");

 

Функция LoadMenu() возвращает дескриптор меню, который используется при всех обращениях к меню стандартными функциями Windows – в частности, указывается девятым параметром вызова функции CreateWindow():

 

 

hWnd = CreateWindow (

szName, // класс окна

" Application", // имя окна

WS_OVERLAPPEDWINDOW, // тип окна

CW_USERDEFAULT, // координата x

CW_USERDEFAULT, // координата y

CW_USERDEFAULT, // ширина

CW_USERDEFAULT, // высота

NULL, // дескриптор родительского окна

LoadMenu (hInstance, "menu"); // дескриптор метю

hInstance, // дескриптор копии

// приложения

NULL); // дополнительная

// информация

 

Таким образом, с окнами одного класса вы можете использовать различные меню. Можно также не указывать меню в структуре класса окна и при создании окна, а добавлять меню после его отображения, используя функцию SetMenu(). Это позволяет динамически изменить меню в процессе работы приложения:

 

SetMenu (hWnd, hMenu);

 

Когда пользователь выбирает пункт меню, функция окна обрабатывает последовательно не одно, а около десяти сообщений!

Сообщения, передаваемые Windows функции окна, можно разнести на уровни: сугубо системные сообщения, редко используемые сообщения «общего употребления» – те, с которыми работает практически каждая программа.

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



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

Последнее сообщение от меню, которое мы рассмотрим, – это сообщение WM_MENUCHAR. Windows передает его приложению, если пользователь нажимает Alt и клавишу, не соответствующую ни одному пункту меню, или если на экране отображается падающее меню и пользователь нажимает клавишу, не соответствующую ни одному пункту этого меню. Параметр wParam сообщения WM_MENUCHAR содержит код нажатой ASCCII клавиши , старшее слово параметра lParam содержит индекс меню, а младшее слово – «код выбора». «Код выбора» равен нулю, если вспомогательные меню не отображаются в данный момент, MF_POPUP, если есть вспомогательное меню, отображенное на экране, и MF_SYSMENU, если на экране отображается системное меню. Обычно это сообщение также не обрабатывается и передается функции defWindowProc; она возвращает Windows ноль, что приводит к подаче звукового сигнала об ошибке.

Диалоговые окна ( диалоги )

Диалоговое окно – это вспомогательное окно, которое содержит различные органы управления (кнопки, статические поля, редактируемые поля, перечни, комбинированные перечни и т.д.)

Диалоговое окно – это ресурс Windows, который называется DIALOG.

Диалоговое окно – используется для установки параметров, выборе опций или режимов работы, вывода текста, ввода-вывода данных и т.д.

Диалоговые окна бывают модальные и немодальные.

Модальные диалоговые окна – не позволяют переключаться на другие окна приложения, пока не будет завершена работа с диалоговым окном.

Однако при этом можно перейти к другому приложению и обратно вернуться к приложению, но в ситуации работы с модальным диалоговым окном.

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

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

Для создания немодальных окон используется функция CreateDialog(), для создания модальных окон функции DialogBox() и MessageBox().

Функции CreateDialog() и DialogBox () имеют одинаковый формат вызова:

 

hDlgModeless=CreateDialog( hInstance, lpszTemplate, hWnd, lpfnAboutProc);

 

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

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

Типичная комбинация флагов, определяющих стиль диалогового окна в файле ресурсов представлена ниже:

 

STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE

 

Если при определении типа немодального окна диалога не указать флаг WS_VISIBLE , то оно не будет автоматически отображено на экране при вызове функции CreateDialog(). Чтобы отобразить такое окно на экране, необходимо воспользоваться функцией ShowWindow().

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

Как и любое окно Windows, каждое окно диалога обслуживается функцией окна диалога. Как и для обычных окон, взаимодействие различных органов управления определяются функцией окна диалога. Однако, в отличие от обычных окон, внешний вид, размер и количество органов управления в окне диалога определяются не в момент создания окна, а определением окна диалога в файле ресурсов.

Для 16-разрядных приложений функция окна диалога, как и любая функция окна, вызывается только Windows и поэтому обязательно должна быть экспортирована – имя функции диалогового окна необходимо указать в операторе EXPORTS файла определения модуля *.def.

Таким образом, для использования окна диалога необходимо:

1) Включить в файл ресурсов описание диалогового окна (ресурс DIALOG ).

2) Добавить в исходный текст приложения функцию диалогового окна.

3) Указать имя функции диалогового окна в файле описания модуля *.def.

 



<== предыдущая лекция | следующая лекция ==>
Создание описания меню в файле ресурсов | Определение диалоговых окон в файле ресурсов


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.005 сек.