Программирование для IBM OS2


Изменение системного меню - часть 2


/p>

Функция WinWindowFromID возвращает идентификатор дочернего окна, заданного своим идентификатором ресурса. Она имеет такой прототип:

HWND WinWindowFromID ( HWND hwndParent, // идентификатор родительского окна ULONG id); // идентификатор ресурса дочернего окна

Так как системное меню имеет идентификатор ресурса, равный FID_SYSMENU , зная его, мы легко сможем определить идентификатор окна системного меню.

На следующем этапе нам необходимо определить идентификатор ресурса для системного меню. Для этого окну системного меню необходимо послать сообщение MM_ITEMIDFROMPOSITION , как это показано ниже:

SHORT sSysMeniID; sSysMeniID = (SHORT)WinSendMsg (hwndSystemMenu, MM_ITEMIDFROMPOSITION , MPFROMSHORT(0), NULL);

Младшее слово параметра mp1 сообщения MM_ITEMIDFROMPOSITION должно содержать порядковый номер элемента меню. В нашем случае требуется определить идентификатор для самого первого элемента, имеющего нулевой номер. Этот элемент является временным системным меню, которое появляется на экране, если сделать щелчок левой или правой клавишей мыши по пиктограмме системного меню.

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

MENUITEM mi; HWND hwndSystemSubMenu; WinSendMsg (hwndSystemMenu, MM_QUERYITEM , MPFROMSHORT(sSysMeniID), MPFROMP(&mi)); hwndSystemSubMenu = mi.hwndSubMenu;

В поле hwndSubMenu этой структуры будет записан искомый идентификатор временного меню.

Структура MENUITEM и указатель на нее определены следующим образом:

typedef struct _MENUITEM { SHORT iPosition; // позиция элемента USHORT afStyle; // стиль USHORT afAttribute; // атрибуты USHORT id; // идентификатор ресурса HWND hwndSubMenu; // вложенное меню ULONG hItem; // идентификатор объекта отображения } MENUITEM ; typedef MENUITEM *PMENUITEM;




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



Книжный магазин