Меню. Главные меню и всплывающие меню, страница 4

Операторы #define файлазаголовка

«define IDM_EXIT 101 #define IDM_ABOUT 102

#define IDM_ITEM1 200 «define IDM_ITEM2 201 «define IDM_ITEM3 202

Файлресурса(.RC)

См.    \local-sources\chap06\06-04.txt

ФункцияWndProc

cm.     \local-sources\chap06\06-05.txt

CopyAcceleratorTable                        • Windows 98   • Windows 2000

 

Описание

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

 

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

 

Синтаксис

hit CopyAcceleratorTable( HACCEL hacclOriginal, LPACCEL IpacclCopy, int cAccel )

 

Параметры

 

HacclOriginal

HACCEL. Дескриптор таблицы оперативных клавиш, которая должна быть скопирована.

 

IpacclCopy

LPACCEL. Указатель на массив структур ACCEL, куда должно быть скопировано содержимое таблицы оперативных клавиш.

 

cAccel

int. Максимальное число входов таблицы оперативных клавиш, которое должно быть скопировано. См. приведенное ниже определение структуры ACCEL.

 

Возвращаемое значение

int. Если параметр IpacclCopy равен NULL, возвращаемым значением является число входов таблицы оперативных клавиш. В ином случае возвращаемым значением является число входов, которые были скопированы.

 

Включаемый файл

winuser.h

 

См. также

CreateAcceleratorTable, DestroyAcceleratorTable, LoadAccelerators, TranslateAccelerator

 

Определение ACCEL

 

typedef  struct  tagACCEL

{ BYTE   fVirt; WORD  key; WORD  and; }   ACCEL;

 

Члены

 

fVirt

BYTE. Одно или несколько значений, приведенных в табл. 6.4, которые объединены с помощью двоичного оператора OR (|).

 

Таблица 6.4. ЗначенияфлажковfVirt структурыACCEL

 

Значение              "* ~

Описание

 

FALT

При нажатии оперативной клавиши необходимо удерживать клавишу Alt.

 

FCONTROL

При нажатии оперативной клавиши необходимо удерживать клавишу Ctrl.

 

FNOINVERT

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

 

FSHIFT

При нажатии оперативной клавиши необходимо удерживать клавишу Shift.

 

FVIRTKEY

Член fcey указывает код виртуальной клавиши. Значение по умолчанию — код символа ASCII.

 

key

WORD. Код виртуальной клавиши, если установлен флажок FVIRTKEY; в ином случае — код символа ASCII.

 

cmd

WORD. Идентификатор оперативной клавиши, который был отправлен при использовании оперативной клавиши.

 

Пример

См. пример для функции CreateAcceleratorTable.

 

CreateAcceleratorTable                        • Windows 98   • Windows 2nnn

 

Описание

Функция CreateAcceleratorTable позволяет создать таблицу оперативных клавиш. В приложении можно создать таблицу оперативных клавиш во время выполнения без загрузки этой таблицы из файла ресурса (RC). Таблицы оперативных клавиш можно также изменять в соответствии с изменениями в меню, используя и функцию CopyAcceleratorTable, и функцию CreateAcceleratorTable.

 

Синтаксис

HACCEL CreateAcceleratorTable( LPACCEL Ipaccl, int nEntries )

 

Параметры

 

Ipaccl

LPACCEL. Указатель на массив структур ACCEL. Определение структуры ACCEL приведено в описании функции CopyAcceleratorTable.

 

nEntries

int. Число структур ACCEL, указанных параметром Ipaccl.

 

Возвращаемое значение

HACCEL. В случае успешного выполнения функции, возвращаемое значение — дескриптор созданной таблицы оперативных клавиш; в ином случае возвращаемое значение — NULL.

 

Включаемый файл

winuser.h

 

См. также

CopyAcceleratorTable, DestroyAcceleratorTable, LoadAccelerators, TranslateAccelerator

 

Пример

г ~     ' ~ j    -------       ---          ------------   —

В следующем примере показано, как динамически изменить в приложении меню и оперативные клавиши. При выборе опции меню Test! в меню добавляется новый пункт (вплоть до четырех), а для нового пункта меню добавляется новая оперативная клавиша (соответственно, Fl, F2, F3 и F4). При выборе новых пунктов меню либо с помощью соответствующей оперативной клавиши, либо из меню появляется окно сообщения. Этот метод можно использовать для добавления  произвольных  пунктов меню и определения для этих пунктов оперативных клавиш. На рис. 6.3 показан пример выбора пункта New Item 2. 

 

Глобальная переменная

HACCEL   hAccel   =  NULL;

Цикл обработки сообщений в функции WinMain

while (   GetMessage(   Smsg,   NULL,   0,   0)    ) {

if   (   ! hAccel   | I    ! TranslateAccelerator (  hWnd,   hAccel,   Smsg   )   ) { TranslateMessage (   Smsg   ) ;

 

DispatchMessage (   Smsg   ) ;

} }

Функция Add NewTest Item

cm.    \local-aources\chap06\06-06.txt Часть функции WndProc

См.    \local-sources\chap06\06-07. txt

CreateMenu                                         • Windows 98   •  Windows 2000

Описание

Функция CreateMenu применяется на первом этапе динамического создания меню в приложении. Первоначально меню является пустым, но может быть заполнено пунктами меню с использованием функций AppendMenu и InsertMenu Функция CreateMenu обычно применяется при создании меню для дочерних окон или в качестве альтернативы способу определения всех меню в файле ресурса (RC) программы. С помощью этой функции нельзя создавать всплывающие меню. Для создания всплывающих меню применяется функция CreatePopupMenu.

Синтаксис

HMENU CreateMenu( VOID )

Параметры

Эта функция не имеет параметров.

Возвращаемое значение

HMENU. В случае успешного выполнения — дескриптор вновь созданного меню; в ином случае возвращаемое значение — NULL.

Включаемый файл

winuser.h

См. также

AppendMenu, DestroyMenu, InsertMenuItem, SetMenu

Пример

В следующем примере в приложении нет меню, описанного в файле ресурса (RC) — оно создается при запуске программы. Создаваемое меню содержит только два пункта. При выборе опции меню Test! отображается окно сообщения.

См.    \local-sources\chap06\06-08.txt

CreatePopupMenu                               • Windows 98   • Windows 2000

Описание

Функция CreatePopupMenu создает пустое всплывающее меню. Всплывающими меню считаются все меню, кроме верхней строки меню. Эта функция создает пустое всплывающее меню, предназначенное для добавления пунктов с использованием функций AppendMenu и InsertMenuItem. Функция CreatePopupMenu применяется для создания меню в теле программы. Эта функция может использоваться в сочетании с функцией TrackPopupMenu для создания незакрепленных всплывающих меню (меню, не прикрепленных к другим меню).

Синтаксис

HMENU CreatePopupMenu( VOID )

Параметры

Эта функция не имеет параметров.

Возвращаемое значение

HMENU. В случае успешного выполнения — дескриптор вновь созданного всплывающего меню; в ином случае возвращаемое значение — NULL.

 

Включаемый файл

winuser.h

 

См. также

AppendMenu, CreateMenu, InsertMenuItem, SetMenu, TrackPopupMenu, TrackPopupMenuEx

 

Пример

См. пример для функции TrackPopupMenu.

 

DeleteMenu                                        • Windows 98   • Windows 2000

 

Описание

Функция DeleteMenu удаляет отдельный пункт из указанного меню. Если пунктом меню является всплывающее меню, оно уничтожается и освобождается память. После этого необходимо вызвать функцию DrawMenuBar для повторного вывода строки меню. Функция DeleteMenu применяется для внесения небольших изменений в меню в процессе выполнения программы. Эта функция может применяться в качестве альтернативы построению нескольких меню и переключению между ними.

 

Синтаксис

BOOL DeleteMenu( HMENU hmenu, UINT ultem, UINT uflags )

 

Параметры

 

hmenu

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

 

ultem

UINT. Пункт меню, который должен быть удален. Это значение зависит от параметра uFlags.

 

и Flags

UINT. Указывает способ интерпретации параметра ultem, как показано в табл. 6.5.

 

Таблица 6.5. ЗначенияпараметровuFlags функцииDeleteMenu

 

Значение

Описание

 

MF_BYCOMMAND

Параметр ultem представляет собой идентификационное значение пункта меню. Это — значение по умолчанию.

 

MF_BYPOSITION

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

 

Возвращаемое значение

BOOL. В случае успешного выполнения возвращаемое значение — TRUE; в ином случае возвращаемое значение — FALSE.

 

Включаемый файл

winuser.h

 

См. также

DrawMenuBar, RemoveMenu

 

Пример

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

 

См.    \local-sources\chap06\06-09.txt

 

DestroyAcceleratorTable                       • Windows 98   +  Windows 2000

Описание

Функция DestroyAcceleratorTable уничтожает таблицу оперативных клавиш. Перед закрытием приложения необходимо вызывать эту функцию в приложении для уничтожения всех таблиц оперативных клавиш, созданных с помощью функции CreateAcceleratorTable. Таблицы оперативных клавиш, которые были загружены с помощью функции LoadAccelerators, не должны уничтожаться.

Синтаксис

BOOL DestroyAcceleratorTable( HACCEL haccl )

Параметры

//ЯСС/

HACCEL. Дескриптор таблицы оперативных клавиш, который был возвращен после вызова функции CreateAcceleratorTable.

Возвращаемое значение

BOOL. В случае успешного выполнения возвращаемое значение — TRUE; в ином случае возвращаемое значение — FALSE.

Включаемый файл

winuser.h

См. также

CopyAcceleratorTable, CreateAcceleratorTable, LoadAccelerators, TranslateAccelerator

Соответствующие сообщения

WM_DESTROY

Пример

См. пример для функции CreateAcceleratorTable.

DestroyMenu                                       • Windows 98   «• Windows 2000

Описание

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

Синтаксис

BOOL DestroyMenu( HMENU hmenu )

Параметры

hmenu

HMENU. Дескриптор меню, которое должно быть уничтожено.

Возвращаемое значение

BOOL. В случае успешного выполнения возвращаемое значение — TRUE; в ином случае возвращаемое значение — FALSE.

Включаемый файл

winuser.h

См. также

CreateMenu, CreatePopupMenu, DeleteMenu, RemoveMenu, GetMenu

Соответствующие сообщения

\VM_DESTROY

Пример

См. пример для функции TrackPopupMenu.

DrawMenuBar                                   • Windows 98   • Windows 2000

 

Описание

Функция DrawMenuBar повторно выводит строку меню. Строка меню не является частью клиентской области окна и поэтому не обновляется при вызове функции UpdateWindow.

Функцию DrawMenuBar необходимо вызывать сразу после внесения любых изменений в меню верхнего уровня.

 

Синтаксис

BOOL DrawMenuBar( HWND hWnd )

 

Параметры

 

hWnd

HWND. Дескриптор окна, которое имеет меню.

 

Возвращаемое значение

BOOL. В случае успешного выполнения возвращаемое значение — TRUE; в ином случае возвращаемое значение — FALSE.

 

Включаемый файл

winuser.h

 

См. также

AppendMenu, DeleteMenu, Insert Menul tern, RemoveMenu

 

Соответствующ

ие сообщения

 

WM_NCPAINT

 

Пример

В следующем примере происходит добавление нового пункта меню и обновление меню.

 

См.    \local-sources\chap06\06-10.txt

 

EnableMenultem                                 • Windows 98   • Windows 2000

 

Описание

Функция EnableMenultem позволяет разрешить, запретить или выделить серым цветом пункт меню. Пункты меню обычно разрешены. Это значит, что выбор пункта меню вызывает отправку сообщения WM_COMMAND функции WndProc окна. Пункты меню можно запретить, чтобы пользователь не мог их выбрать, но они будут при этом выглядеть, как обычно. Запрещая пункты меню, можно также показать визуально их отличие от других пунктов меню (вывести текст серым цветом, применяя цвета Windows, предусмотренные по умолчанию), чтобы пользователь мог легко определить, какие команды разрешены.

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

 

Синтаксис

BOOL EnableMenuItem( HMENU hMenu, UINT ultem, UINT uFlags )

 

Параметры

 

hMenu

HMENU. Дескриптор меню. Для выборки меню окна применяется функция GetMenu.

 

ultem

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

 

uFlags

UINT. Действие, которое должно быть выполнено, и способ интерпретации параметра ultem. Значения, приведенные в табл. 6.6, могут быть объединены с помощью двоичного оператора OR (|).

 

Таблица 6.6. ЗначенияпараметровuFlags функцииEnableMenultem

 

Значение

Описание

 

MF_BYCOMMAND

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

 

MF_BYPOSITION

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

 

MFS_ENABLED

Разрешить пункт меню и восстановить цвет текста, приведя его к нормальному цвету пункта меню.

 

MFS_GRAYED

Запретить пункт меню и выделить текст серым цветом.

 

Возвращаемое значение

BOOL. Предыдущее состояние пункта меню (MF_DISABLED, MF_ENABLED или MF_GRAYED). Если пункт меню не существует, возвращаемое значение — OxFFFFFFFF (-1).

 

Включаемый файл

winuser.h

 

См. также

GetMenuItemlnfo, CreateMenu, GetMenuItemlD, SetMenuItemlnfo

 

Соответствующие сообщения

 

WM_COMMAND

 

Пример

В следующем примере пункт меню, обозначенный как IDM_ITEM1, переключается между разрешенным и запрещенным состоянием при выборе опции меню Test!.

 

См.    \local-sources\chap06\06-ll.txt

 

EndMenu

• Windows 98   • Windows 2000

 

Описание

Функция EndMenu завершает работу активного меню вызывающей нити. Это аналогично отправке владельцу меню сообщения WM^CANCELMODE.

 

Синтаксис

BOOL EndMenu( VOID )

 

Параметры

Эта функция не имеет параметров.

 

Возвращаемое значение

BOOL. В случае успешною выполнения возвращаемое значение отлично от нуля; в ином случае возвращаемое значение — нуль.

 

Включаемый файл

winuser.h

 

Соответствующее сообщение

 

WM_CANCELMODE

 

GetMenu

Windows 98   • Windows 2000

 

Описание

Функция GetMenu выбирает дескриптор меню для окна. Функция Get-Menu применяется перед изменением или уничтожением меню. Эта функция не возвращает действительный дескриптор для дочерних окон, имеющих меню.

 

Синтаксис

HMENU GetMenu( HWND h Wnd )

 

Параметры

 

hWnd

HWND. Дескриптор окна, для которого должно быть выбрано меню.

 

Возвращаемое значение

HMENU. В случае успешного выполнения — дескриптор меню указанного окна. Если окно не имеет меню, возвращаемое значение — NULL. Если окно представляет собой дочернее окно, возвращаемое значение не определено.

 

Включаемый файл

winuser.h

 

См. также

GetSubMenu, SetMenu, AppendMenu, Insert Menult em, GetMenuInfo, SetMenuInfo, EnableMenuItem

 

Пример

См. пример для функции EnableMenuItem.

 

GetMenuBarlnfo                                  • Windows 98   • Windows 2000

 

Описание

GetMenuBarlnfo выбирает информацию об указанной строке меню.

 

Синтаксис

BOOL GetMenuBarInfo( HWND   hWnd, LONG   lObject, LONG   lltem, PMENUBARINFO pmbi )

 

Параметры

 

hWnd

HWND. Дескриптор окна, которому принадлежит меню; для этого меню будет выбрана информация.

 

lObject

LONG. Указывает объект меню, для которого должна быть выбрана информация. Этот параметр может иметь одно из значений, перечисленных в табл. 6.7.

 

Таблица 6.7. Значения параметров (Object функции GetMenuBarlnfo

 

Значение

Описание

 

OBJID_CLIENT

Всплывающее меню, связанное с указанным окном.

 

OBJID_MENU

Строка меню, связанная с указанным окном. Это — то же меню, которое возвращено в результате вызова функции GetMenu.

 

OBJID  SYSMENU

Системное меню, связанное с указанным окном. Это — то же меню, которое возвращено в результате вызова функции GetSystemMenu.

 

lltem

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

 

pmbi

PMENUBARINFO. Указатель на структуру MENUBARINFO, которая получает информацию.

 

Возвращаемое значение

BOOL. В случае успешного выполнения возвращаемое значение отлично от нуля; в ином случае возвращаемое значение — нуль.

 

Включаемый файл

winuser.h

 

См. также

GetMenu, GetSystemMenu

 

Определение MENUBARINFO

typedef   struct   tagMENUBARINFO ( DWORD   cbSize; RECT      rcBar;

 

HMENU  hMenu; HWND      hwndMenu ; BOOL      fBarFocused : 1 ; BOOL      fFocused : 1 ; }   MENUBARINFO,    * PMENUBARINFO;

 

Члены

 

cbSize

DWORD. Размер структуры в байтах.

 

rcBar

RECT. Указывает координаты строки меню, всплывающего меню или пункта меню.

 

hMenu

HMENU. Дескриптор строки меню или всплывающего меню.

 

hwndMenu

HWND. Дескриптор подменю.

 

fBarFocused

BOOL. Если строка меню или всплывающее меню имеет фокус, этот член устанавливается в TRUE; в ином случае он устанавливается в FALSE.

 

fFocused

BOOL. Если пункт меню имеет фокус, этот член устанавливается в TRUE; в ином случае он устанавливается в FALSE.

 

GetMenuDefaultltem                           • Windows 98   • Windows 2000

 

Описание

Функция GetMenuDefaultltem выбирает идентификатор пункта меню, предусмотренного по умолчанию для указанной строки меню или всплывающего меню. В Windows 2000 и Windows 98 каждая строка меню и каждое всплывающее меню может иметь пункт меню, предусмотренный по умолчанию. Пункт меню, предусмотренный по умолчанию, внешне выглядит иначе по сравнению с обычными пунктами меню и может быть выбран двойным щелчком мыши на пункте родительского меню.

 

Синтаксис

UINT GetMenuDefaultItem( HMENU hMenu, UINT uByPos, UINT gmdi Flags )

 

Параметры

 

hMenu

HMENU. Дескриптор меню.

 

uByPos

UINT. Если устанавливается в FALSE, будет возвращен идентификатор пункта меню. Если устанавливается в TRUE, будет возвращена позиция пункта меню.

 

gmdi Flags

UINT. Указывает способ поиска функцией пункта меню, заданного по умолчанию. В качестве этого парамегра можно установить нуль или более значений, перечисленных в табл. 6.8.

 

Таблица 6.8. ЗначенияпараметровgmdiFlags функцииGetMenuDefaultltem

 

Значение

Описание

 

GMDI_GOINTOPOPUPS

Если по умолчанию предусмотрен пункт всплывающего меню, назначение этого параметра состоит в рекурсивном поиске в соответствующем всплывающем меню. Если всплывающее меню не имеет пункта, предусмотренного по умолчанию, то возвращаемое значение указывает пункт всплывающего меню. В соответствии с установленным соглашением,  возвращается первый предусмотренный по умолчанию пункт указанного меню, независимо от того, является ли он пунктом всплывающего меню.

 

GMDI_USEDISABLED

По умолчанию функция пропускает запрещенные или недоступные пункты меню. Если установлен этот флажок, они не будут пропущены.

 

Возвращаемое значение

UINT. В случае успешного выполнения — идентификатор меню или позиция пункта меню; в ином случае возвращаемое значение равно -1.

 

Включаемый файл

winuser.h

 

См. также

SetMenuDefaultltem, GetMenuItemlnfo, SetMenuItemlnfo

 

Пример

См. пример для функции SetMenuDefaultltem.

 

GetMenulnfo                                      • Windows 98   • Windows 2000

 

Описание

GetMenulnfo выбирает информацию об указанном меню.

 

Синтаксис

BOOL GetMenuInfo( HMENU hMenu, LPMENUINFO Ipmi )

 

Параметры

 

Л Мели

HMENU. Дескриптор меню.

 

Ipmi

LPMENUINFO. Указатель на структуру MENUINFO, которая принимает информацию об указанном меню.

 

Возвращаемое значение

BOOL. В случае успешного выполнения возвращаемое значение отлично от нуля; в ином случае возвращаемое значение — нуль.

 

Включаемый файл

winuser.h

 

См. также

SetMenuInfo

 

Определение MENUINFO

 

typedef  struct  tagMENUINFO { DWORD   cbSize; DWORD   fMask; DWORD  dwStyle; DINT     cyMax; HBROSH  hbrBack; DWORD      dwContextHelpID; ULONG_PTR  duMenuData }   MENOINFO,    *LPMENUIKFO;

 

Члены

 

cbSize

DWORD. Размер структуры в байтах.

 

/Mask

DW0RD. Указывает, какие члены должны быть выбраны или установлены. Этот член может быть установлен в одно или несколько значений, перечисленных в табл. 6.9.

 

Таблица 6.9. ЗначенияпараметраfMask структурыMENUINFO

 

Значение

Описание

 

MIM  APPLYTOSUBMENUS

Установки будут применяться к меню и ко всем его подменю. Функция GetMenulnfo игнорирует этот флажок; однако функция SetMenuInfo его использует.

 

MIM_BACKGROUND

Выбирает или устанавливает член hbrBack.

 

MIM_HELPID

Выбирает или устанавливает член dwContextHelpID .

 

MIM_MAXHEIGHT

Выбирает или устанавливает член суMax.

 

MIM  MENUDATA

Выбирает или устанавливает член dwMenuDafa.

 

MIM_STYLE

Выбирает или устанавливает член dwStyle.

 

dwStyle

DWORD. Стиль меню. Этот параметр может иметь одно или несколько значений, перечисленных в табл. 6.10.

 

Таблица 6.10, ЗначенияпараметровdwStyle структурыMENUINFO

 

Значение

Описание

 

MNS_AUTODISMISS

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

 

MNS_CHECKORBMP

И для отметки, и для растрового изображения резервируется одно и то же пространство. Если отображается отметка, растровое изображение не отображается. Все отметки и растровые изображения выравниваются. Применяется в меню, где в одних пунктах используются отметки, а в других — растровые изображения.

 

MNS_DRAGDROP

Пункты меню являются адресатами опускания или источниками перетаскивания OLE-автоматизации. Владелец меню получает сообщения WM_MENUDRAG и WM_MENUGETOBJECT.

 

MNS_MODELESS

Меню является немодальным, и, пока меню активно, не существует цикл модальных сообщений меню.

 

MNS_NOCHECK

Слева от пункта не резервируется пространство для отметки. Пункт может быть выбран, но рядом с ним не появляется отметка.

 

MNS_NOTIFYBYPOS

Владелец меню получает сообщение WM_MENUCOMMAND вместо сообщения WM_COMMAND, когда пользователь делает выбор.

 

суМох

UINT. Максимальная высота меню в пикселях. Когда пункты меню превышают по размерам доступное пространство, автоматически используются линейки прокрутки. Значение по умолчанию равно нулю, и в этом случае используется высота экрана.

 

hbrBack

HBRUSH. Кисть, применяемая для отображения цвета фона меню.

 

dwContextHelpID

DWORD. Контекстный идентификатор справки. Это — то же значение, которое используется в функциях  GetMenuContextHelpId и SetMenu-ContextHelpId

 

dwMenuData

ULONG_PTR. Значение, определяемое приложением.

 

GetMenultemCount                             • Windows 98   • Windows 2000

 

Описание

Функция GetMenultemCount позволяет определить число пунктов в указанном меню. Это число включает заголовки верхнего уровня всех всплывающих меню, но не включает сами пункты всплывающего меню. Функция GetMennltemCount применяется для определения числа существующих пунктов меню перед выборкой данных о пунктах меню, таких как идентификационные номера, строки и т.д.

 

Синтаксис

hit GetMenuItemCount( HMENU hMenu )

 

Параметры

 

hMenu

HMENU. Дескриптор меню.

 

Возвращаемое значение

int. В случае успешного выполнения — число пунктов меню; в ином случае возвращаемое значение равно -1.

 

Включаемый файл

winuser.h

 

См. также

GetMenu, GetSubMenu

 

Пример

В следующем примере функция GetMenuItemCount применяется для выборки числа пунктов в главном меню.

 

СМ.    \Jocal-sources\chap06\06-12.txt

 

GetMenultemID                                  • Windows 98   * Windows 2000

 

Описание

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

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

 

Синтаксис

UINT GetMenuItemID( HMENU hMenu, int nPos )

 

Параметры

 

hMenu

HMENU. Дескриптор строки меню или всплывающего меню, содержащего пункт, идентификатор которого должен быть выбран.

 

nPos

int. Относительная позиция пункта меню с отсчетом от нуля.

 

Возвращаемое значение

UINT. Идентификатор пункта меню (ID), соответствующий пункту меню в позиции nPos. Если идентификатор пункта меню равен NULL или если указанный пункт вызывает всплывающее меню, возвращаемое значение — OxFFFFFFFF.

 

Включаемый файл

winuser.h

 

См. также

GetMenuItemCount, GetMenuString, GetMenultemlnfo, GetMenu, GetSubMenu

 

Пример

В следующем примере функция GetMenultemID применяется для получения идентификатора второго пункта главного меню.

 

С м.    \local-sources\chap06\06-13.txt

 

GetMenultemlnfo                                 • Windows 98   «•  Windows 2000

 

Описание

Функция GetMenultemlnfo выбирает информацию о пункте меню. С помощью этой функции можно выбрать сразу всю информацию о пункте меню вместо выборки по одному атрибуту с помощью других функций работы с меню.

 

Синтаксис

BOOL GetMenuItemInfo( HMENU hMenu, UINT ultem, BOOL bByPosition, LPMENUITEMINFO Ipmii )

 

Параметры

 

hMenu

HMENU. Дескриптор меню, которое содержит указанный пункт.

 

ultem

UINT. Идентификатор или позиция пункта меню, о котором должна быть получена информация.

 

bByPosition

BOOL. Устанавливается в FALSE, если значение параметра ultem представляет собой идентификатор пункта меню. В ином случае ultem — позиция пункта меню.

 

Ipmii

LPMENUITEMINFO. Указатель на структуру MENUITEMINFO, которая принимает информацию об указанном пункте меню. См. приведенное ниже определение структуры MENUITEMINFO.

 

Возвращаемое значение

BOOL. В случае успешного выполнения возвращаемое значение — TRUE; в ином случае возвращаемое значение — FALSE.

 

Включаемый файл

winuser.h

 

См. также

SetMenuItemlnfo

 

Определение MENUITEMINFO

 

typedef   struct   tagMENUITEMINFO { UINT            cbSize; HINT            fMask; DINT            fType,-UINT            f State; UINT            WID ; HMENU        hSubMenu; HBITMAP   hbmpChecked; HBITMAP   hbmpUnchecked; ULONG_PTR  dwItemData; LPTSTR      dwTypeData ; UINT            cch; HBITMAP   hbmpltem; }       MENUITEMINFO,    «LPMENUITEMINFO;

 

Члены

 

cbSize

UINT. Размер структуры в байтах. Перед использованием в функции этот параметр должен быть инициализирован.

 

fMask

UINT. Одно или несколько значений, перечисленных в табл. 6.1 1, которые определяют, какие члены этой структуры должны быть установлены или выбраны.

 

Таблица 6.11. ЗначенияпараметраfMask структурыMENUITEMINFO

 

Значение

Описание

 

М11М_В1ТМАР

Выбирает или устанавливает член hbmpltem

 

MIIM_CHECKMARKS

Выбирает или устанавливает члены hbmpChecked и hbmpUnchecked

 

MIIM_DATA

Выбирает или устанавливает член dwItemData

 

MIIM_FTYPE

Выбирает или устанавливает член fType

 

MIIMJD

Выбирает или устанавливает член w/D

 

MIIM_STATE ,

Выбирает или устанавливает член {State

 

МММ  STRING

Выбирает или устанавливает член dwTypeDafa

 

MIIM_SUBMENU

Выбирает или устанавливает член hSubAHenu

 

MHMJTYPE

Выбирает или устанавливает члены fType и dwTypeData

 

JType

UINT. Тип пункта меню. Этот параметр может иметь одно или несколько значений MFT_, перечисленных в табл. 6.2.

 

/State

UINT. Состояние пункта меню. Этот параметр может иметь одно или несколько значений MFS_, перечисленных в табл. 6.2.

 

wID

UINT. Идентификатор пункта меню.

 

hSubMenu

HMENU. Дескриптор выпадающего меню или подменю, связанного с указанным пунктом меню. Если данный пункт меню не открывает выпадающее меню или подменю, этот член имеет значение NULL.

 

hbmpChecked

HBITMAP. Дескриптор растрового изображения, которое отображается рядом с пунктом меню, если он отмечен. Если этот член имеет значение NULL, используется растровое изображение, предусмотренное по умолчанию.

 

hbmp Unchecked

HBITMAP. Дескриптор растрового изображения, которое отображается рядом с пунктом меню, если он не отмечен. Если этот член имеет значение NULL, никакое растровое изображение для этого не используется.

 

dwItemData

ULONG_PTR. Определяемое приложением значение, связанное с пунктом меню.

 

dwTypeData

LPTSTR. Содержимое пункта меню. Смысл этого члена зависит от типа пункта меню.

 

cch

UINT. Длина текста при получении информации о пункте меню типа MFTJSTRING. Этот член равен 0 для пунктов меню других типов и игнорируется, если эта структура используется в функции SetMenuItemlnfo.

 

hbmpltem

HBITMAP. Дескриптор отображаемого растрового изображения или одно из значений, перечисленных в табл. 6.12.

 

Таблица 6. 12. Значенияпараметраhbmpltem структурыMENUITEMINFO

 

Значение

Отображаемое растровое изображение

 

HBMMENU_CALLBACK

Растровое изображение, выведенное окном, которому принадлежит меню. Приложение должно обрабатывать сообщения  WM_MEASUREITEM и WM_DRAWITEM.

 

HBMMENU_MBAR_CLOSE

Кнопка закрытия для строки меню.

 

HBMMENU_MBAR_CLOSE_D

Запрещенная кнопка закрытия для строки меню.

 

HBMMENU_MBAR_MINIMIZE

Кнопка свертывания для строки меню.

 

HBMMENU_MBAR_MINIMIZE  D

Запрещенная кнопка свертывания для строки меню.

 

HBMMENU_MBAR_RESTORE

Кнопка восстановления для строки меню.

 

HBMMENU_POPUP_CLOSE

Кнопка закрытия для подменю.

 

HBMMENU_POPUP_MAXIMIZE

Кнопка развертывания для подменю.

 

HBMMENU_POPUP_MINIMIZE

Кнопка свертывания для подменю.

 

HBMMENU_POPUP_RESTORE

Кнопка восстановления для подменю.

 

HBMMENU_SYSTEM

Пиктограмма Windows или пиктограмма окна, указанного параметром dw/femDafa.    '

 

Пример

В следующем примере функция GetMenuItemlnfo применяется для выборки текста пункта меню при выборе пункта меню Test!. Затем текст пункта меню отображается в окне сообщения.

 

См.    \local-sources\chap06\06-14 . txt

 

GetMenultemRect                               • Windows 98   • Windows 2000

 

Описание

Функция GetMenultemRect определяет прямоугольную область, которую пункт меню занимает на экране.

 

Синтаксис

BOOL GetMenuItemRect( HWND hWnd, HMENU hMenu, UINT ultem, LPRECT Iprcltem )

 

Параметры

 

hWnd

HWND. Дескриптор окна, содержащего строку меню или всплывающее меню. Если этот параметр имеет значение NULL и параметр hMenu представляет всплывающее меню, данная функция определяет окно меню.

 

hMenu

HMENU. Дескриптор строки меню или всплывающего меню.

 

ultem

UINT. Позиция пункта меню с отсчетом от нуля.

 

Iprcltem

LPRECT. Указатель на структуру RECT, которая принимает ограничительный прямоугольник указанного пункта меню. Если параметр hMenu указывает строку меню, функция возвращает экранные координаты; в ином случае она возвращает клиентские координаты.

 

Возвращаемое значение

BOOL. В случае успешного выполнения возвращаемое значение — TRUE; в ином случае возвращаемое значение — FALSE.

 

Включаемый файл

winuser.h

 

См. также

GetMenu. GetSubMenu

 

Пример

В следующем примере прямоугольник пункта меню Test! отображается в окне сообщения, когда пользователь выбирает пункт меню Test!.

 

См.    \Iocal-sources\chap06\06-15.txt

 

GetMenuStat

:е                                     • Windows 98   • Windows 2000

 

Описание

Функция GetMenuState выбирает информацию о состоянии пункта меню или о числе пунктов во всплывающем меню. Функция GetMenuState чаще всего применяется для определения того, отмечен ли пункт меню, выделен серым цветом или отменен.

 

Синтаксис

UINT GetMenuState( HMENU hmenu, UINT ultem, UINT uFlags )

 

Параметры

 

hmenu

HMENU. Дескриптор меню.

 

ultem

UINT. Идентификатор или позиция пункта меню.

 

uflags

UINT. Указывает способ интерпретации параметра ultem, как показано в табл. 6.13.

 

Таблица 6.13. ЗначенияпараметровuFlags функцииGetMenuState

 

Значение                    "

Описание

 

MF  BYCOMMAND

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

 

MF_BYPOSITION

Значение if/tern представляет собой относительную позицию пункта меню с отсчетом от нуля.

 

Возвращаемое значение

UINT. В случае ошибки возвращает OxFFFFFFFF. Если параметр ultem обозначает всплывающее меню, старший байт содержит число пунктов во всплывающем меню. Младший байт содержит комбинацию флажков, по-

 

казанных в табл. 6.2. Значения объединены с помощью двоичного оператора OR (|).

 

Включаемый файл

winuser.h

 

См. также

CheckMenuItem, CheckMenuRadioItem, GetMenuItemlnfo

 

Пример

В следующем примере, показанном на рис. 6.4, в качестве отметки для пункта меню ШМ_СНК1ТЕМ применяется растровое изображение под названием "Checkmark". В приложении не известны заранее размеры растрового изображения или размеры отметок в меню (это зависит от разрешающей способности экрана). Размеры растрового изображения корректируются в соответствии со значениями, определяемыми во время запуска приложения.

 

См.    \local-so

urces\chap06\06-16. txt