Операционная система Microsoft Windows 3.1 для программиста -том 3


Графика в меню - часть 3


В этом же файле описаны ближний и дальний указатели на эту структуру:

typedef MEASUREITEMSTRUCT NEAR* PMEASUREITEMSTRUCT; typedef MEASUREITEMSTRUCT FAR* LPMEASUREITEMSTRUCT;

Когда функция окна получает сообщение WM_MEASUREITEM, поле CtlType содержит значение ODT_MENU, в поле itemID находится идентификатор строки меню, а в поле itemData - 32-разрядное значение, переданное через параметр lpNewItem функций AppendMenu, InsetMenu, ModifyMenu. Поле CtlID не используется.

Получив сообщение WM_MEASUREITEM, функция окна должна, пользуясь значением указателя из lParam, записать в поле itemWidth ширину строки меню, а в поле itemHeight - высоту строки меню.

Параметр lParam сообщения WM_DRAWITEM содержит указатель на структуру DRAWITEMSTRUCT . Эта структура и соответствующие указатели описаны в файле windows.h следующим образом:

typedef struct tagDRAWITEMSTRUCT { UINT CtlType; UINT CtlID; UINT itemID; UINT itemAction; UINT itemState; HWND hwndItem; HDC hDC; RECT rcItem; DWORD itemData; } DRAWITEMSTRUCT; typedef DRAWITEMSTRUCT NEAR* PDRAWITEMSTRUCT; typedef DRAWITEMSTRUCT FAR* LPDRAWITEMSTRUCT;

Приведем назначение отдельных полей структуры DRAWITEMSTRUCT при ее использовании для меню.

Имя поля Описание
CtlType Тип органа управления. Для меню принимает значение ODT_MENU
CtlID Идентификатор органа управления. Для меню не используется
itemID Идентификатор строки меню
itemAction Действия, которые необходимо выполнить при изображении строки меню. Определен в виде отдельных битовых флагов:

ODA_DRAWENTIRE - требуется перерисовать всю строку;

ODA_FOCUS - этот бит устанавливается в 1, если строка меню получила или потеряла фокус ввода, новое состояние строки можно узнать, проанализировав содержимое поля itemState;

ODA_SELECT - изменилось состояние строки меню, для уточнения состояния необходимо использовать поле itemState

itemState Вид, в котором необходимо изобразить строку меню. Определен в виде отдельных битовых флагов:

ODS_CHECKED - выбрана строка меню;

ODS_DISABLED - строка неактивна;

ODS_FOCUS - строка получила фокус ввода;

ODS_GRAYED - строка меню должна быть изображена серым цветом;

ODS_SELECTED - строка выбрана

hwndItem Идентификатор меню
hDC Контекст устройства, который необходимо использовать для рисования строки меню
rcItem Прямоугольные границы, внутри которых необходимо нарисовать строку
itemData Содержит 32-битовое значение, полученное через параметр lpNewItem функций AppendMenu, InsetMenu, ModifyMenu




Начало  Назад  Вперед