Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры по Леонову, 5семестр.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
503.3 Кб
Скачать

27.Работа с меню. Обработка сообщений.

Каждое окно, имеющее заголовок, может предоставлять доступ к системно­му меню, которое вызывается щелчком левой кнопки мыши на значке, рас­положенном в левой части заголовка окна и содержит стандарт­ные команды.

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

Класс CMenu

Это класс, который инкапсулирует объект Windows, определяемый дескриптором HMENU, и предоставляет функции для работы с меню. С помощью этого класса приложение может создавать меню, даже не имея его шаблона, добавлять или удалять элементы или подменю, управлять их со­стоянием — активизировать или блокировать, отмечать команды и т. д.

CMenu: :m_hMenuопределяет дескриптор HMENU меню Windows, присоединенного к объекту класса, для создания которого, как обычно, используется конструктор

CMenu::CMenu( ) —конструктор. Следует совершенно четко представлять, что при создании объекта само меню — объект Windows — не создается автоматически. Для того чтобы это реализо­вать, необходимо вызвать одну из функций, отвечающих за создание или загрузку меню

Если создание меню производится на основе шаблона, то можно воспользо­ваться функцией:

BOOL CMenu::LoadMenu(LPCTSTR IpszResourceName) – загружает ресурс меню из исполняемого файла приложения. В качестве параметра используется указатель на текстовую строку, содержащую имя ресурса загружаемого меню.

Для поддержки работы с контекстными меню в классе реализована функция:

BOOL CMenu::TrackPopupMenu(

UlNT nFlags,

int x,

int y,

CWnd *pWnd,

LPCRECT lpRect = 0) - выводит на экран контекстное меню и создает свой собственный цикл обработки сообще­ний. Функция не завершается до тех пор, пока работа с меню не будет закончена либо выбором элемента, либо отказом выбора, после чего меню уничтожается. Параметр nFlags определяет расположение контекстного меню (относительно экрана) и кнопку мыши, с по­мощью которой должен выполняться выбор. Параметр pWnd задает окно, которое получит сообщение WM_COMMAND после того, как пользователь сделает выбор в контекстном меню, a IpRect является указателем на структуру типа RECT (или объект класса CRect), определяющую координаты прямоуголь­ной области, в которой пользователь может выполнять выбор из меню. Если щелчок мышью будет сделан вне этой области, контекстное меню исчезнет с экрана, что эквива­лентно отказу от выбора. Если для него задать значение NULL, то размеры и расположе­ние этой прямоугольной области будут совпадать с размерами контекстного меню.

Обработка сообщения WM_PAINT

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

CWnd::BeginPaint и CWnd::EndPaint.

Между этими двумя процедурам располагается сердцевина обработчика сообщения WM_PAINT.