GetMenuString • Windows 98 «• Windows 2000 |
||||||||||||||||||||||
Описание |
Функция GetMenuString выбирает в указанный строковый буфер строку текста пункта, включая символ амперсанда (&), используемый для указания мнемонического символа. Функция GetMenuString применяется в программах, позволяющих пользователю добавлять и удалять пункты меню, определяемые пользователем, такие как макрокоманды. |
|||||||||||||||||||||
Синтаксис |
int GetMenuString( HMENU hmenu, UINT ultem, LPTSTR Ipsz, int cchMax, UINT uFlags ) |
|||||||||||||||||||||
Параметры |
||||||||||||||||||||||
hmenu |
HMENU. Дескриптор меню. |
|||||||||||||||||||||
ultem |
UINT. Идентификатор пункта меню или позиция, в соответствии с тем, что определено параметром uFlags. |
|||||||||||||||||||||
Ipsz |
LPTSTR Указатель на строковый буфер, который должен содержать строку текста пункта. |
|||||||||||||||||||||
cchMox |
int. Максимальное число символов, которое должно быть записано в буфер. Этот параметр позволяет предотвратить запись за пределами буфера. |
|||||||||||||||||||||
uFlags |
UINT. Указывает способ интерпретации параметра ultem. Этот параметр может иметь одно из значений, приведенных в табл. 6.13. |
|||||||||||||||||||||
Возвращаемое значение |
||||||||||||||||||||||
int. Число выбранных символов. |
||||||||||||||||||||||
Включаемый файл |
winuser.h |
|||||||||||||||||||||
См. также |
GetMenuItemID, GetMenuItemCount, GetMenuState, GetMenuItemlnfo, GetSubMenu |
|||||||||||||||||||||
Пример |
В следующем примере отображается текст пункта меню, когда пользователь выбирает пункт меню Test!. |
|||||||||||||||||||||
Сн. \local-sources\chap06\06-17.txt |
||||||||||||||||||||||
GetSubMenu • Windows 98 • Windows 2000 |
||||||||||||||||||||||
Описание |
Функция GetSubMenu выбирает дескриптор всплывающего меню. Дескриптор всплывающего меню может быть найден только после определения дескриптора главного меню; обычно это делается с помощью функции GetMenu. После получения дескриптора к этому всплывающему меню можно применить все функции, которые обеспечивают чтение и изменение пунктов меню. |
|||||||||||||||||||||
Синтаксис |
HMENU GetSubMenu( HMENU hmenu, int nPos ) |
|||||||||||||||||||||
Параметры |
||||||||||||||||||||||
hmenu |
HMENU. Дескриптор родительского меню всплывающего меню. |
|||||||||||||||||||||
nPos |
int. Относительная позиция с отсчетом от нуля пункта меню в указанном меню, которое активизирует это всплывающее меню. |
|||||||||||||||||||||
Возвращаемое значение |
HMENU. Дескриптор всплывающего меню. Возвращаемое значение — NULL, если пункт меню не активизирует всплывающее меню. |
|||||||||||||||||||||
Включаемый файл |
winuser.h |
|||||||||||||||||||||
См, также |
Create PopupMenu. GetMenu, GetMenuItemCount, GetMenuItemID, GetMenuState, GetMenuString, AppendMenu. SetMenuItemlnfo |
|||||||||||||||||||||
Пример |
См. пример для функции SetMenuDefaultltem. |
|||||||||||||||||||||
GetSystemMenu • Windows 98 • Windows 2000 |
||||||||||||||||||||||
Описание |
Функция GetSystemMenu выбирает дескриптор системного меню. Системное меню — это всплывающее меню, которое отображается при щелчке на малой пиктограмме в верхнем левом углу окна. Системное меню вырабатывает сообщение WM_SYSCOMMAND, а не сообщение WM_COMMAND. При активизации пункта системного меню выполняется установка параметра wParam сообщения WM_SYSCOMMAND, как показано в табл. 6.14. |
|||||||||||||||||||||
Таблица 6.14. ЗначенияпараметраwParam сообщенияWM_SYSCOMMAND |
||||||||||||||||||||||
Значение |
Описание |
|||||||||||||||||||||
SC_ARRANGE |
Упорядочить свернутые пиктограммы окон. |
|||||||||||||||||||||
SC_CLOSE |
Закрыть окно. |
|||||||||||||||||||||
SC_CONTEXTHELP |
Изменить вид курсора на вопросительный знак со стрелкой. Если пользователь затем щелкает на элементе управления в диалоговом окне, элемент управления получает сообщение WM_HELP. |
|||||||||||||||||||||
SC_DEFAULT |
Выбрать заданный по умолчанию пункт меню; пользователь дважды щелкнул на системном меню. |
|||||||||||||||||||||
SC_HOTKEY |
Активизировать окно, связанное с вызывающей клавишей, определенной в приложении. Младшее слово параметра /Param обозначает окно, которое должно быть активизировано. |
|||||||||||||||||||||
Включаемый файл |
winuser.h |
|||||||||||||||||||||
См. также |
AppendMenu, GetMenu, InsertMenuItem, SetMenuItemlnfo |
|||||||||||||||||||||
Соответствуклш |
le сообщения |
|||||||||||||||||||||
WM_SYSCOMMAND, WMJNITMENU |
||||||||||||||||||||||
Пример |
В следующем примере к системному меню добавляется пункт меню Test Item после пункта меню Maximize. При выборе нового пункта меню отображается окно сообщения. |
|||||||||||||||||||||
См. \local-sources\chap06\06-18. txt |
||||||||||||||||||||||
HiliteMenultem • Windows 98 • Windows 2000 |
||||||||||||||||||||||
Описание |
Обычно высвечивание пунктов меню верхнего уровня обеспечивается за счет автоматических действий мыши и предусмотренной по умолчанию оперативной клавиши. Если высвечивание пунктов меню верхнего уровня необходимо выполнить непосредственно в самой программе, можно применить функцию HiliteMenultem. Функция HiliteMenultem предоставляет дополнительные клавиатурные альтернативы для выбора пунктов меню. |
|||||||||||||||||||||
Синтаксис |
BOOL HiliteMenuItem( HWND hwnd, HMENU hmenu, UINT ultem, UINT uHilite ) |
|||||||||||||||||||||
Параметры |
||||||||||||||||||||||
hwnd |
HWND. Дескриптор окна, которое содержит меню. |
|||||||||||||||||||||
hmenu |
HMENU. Дескриптор строки меню, содержащей пункт, который должен быть высвечен. |
|||||||||||||||||||||
и Item |
UINT. Идентификатор пункта меню, который должен быть высвечен. Могут быть высвечены только пункты меню верхнего уровня. |
|||||||||||||||||||||
uHilite |
UINT. Управляет интерпретацией параметра ultem и указывает, высвечен ли пункт меню. Два значения, приведенные в табл. 6.15, объединяются с помощью двоичного оператора OR (|). |
|||||||||||||||||||||
Возвращаемое значение |
BOOL. Если пункт меню установлен в указанное высвеченное состояние, возвращаемое значение отлично от нуля; в ином случае возвращаемое значение — нуль. |
|||||||||||||||||||||
Таблица 6. 15. ЗначенияпараметровuHilite функцииHiliteMenultem |
||||||||||||||||||||||
Значение |
Описание |
|||||||||||||||||||||
MF_BYCOMMAND |
Значение, приведенное в параметре u/tem, представляет собой идентификатор пункта меню. |
|||||||||||||||||||||
MF_BYPOSITION |
Значение, приведенное в параметре u/fem, представляет собой относительную позицию пункта меню с отсчетом от нуля. |
|||||||||||||||||||||
MF_HILITE |
Высветить пункт меню. |
|||||||||||||||||||||
MF_UNHILITE |
Этот пункт меню не высвечен. |
|||||||||||||||||||||
Включаемый файл |
winuser.h |
|||||||||||||||||||||
Значение |
Описание |
|||||||||||||||||||||
SC_HSCROLL |
Выполнить прокрутку по горизонтали. |
|||||||||||||||||||||
SC_KEYMENU |
Выбрать системное меню с применением комбинаций клавиш. |
|||||||||||||||||||||
SC_MAXIMIZE (или SC_ZOOM) |
Развернуть окно. ; ! |
|||||||||||||||||||||
SC_MINIMIZE (или SCJCON) |
Свернуть окно. 1 |
|||||||||||||||||||||
SC_MONITORPOWER |
Установить состояние монитора. Эта команда применяется для устройств, оборудованных средствами энергосбережения, таких как персональные компьютеры с батарейным питанием. |
|||||||||||||||||||||
SC_MOUSEMENU |
Выбрать системное меню, как в результате щелчка мышью. |
|||||||||||||||||||||
SC_MOVE |
Переместить окно. |
|||||||||||||||||||||
SC_NEXTWINDOW |
Выполнить перемещение к следующему окну. |
|||||||||||||||||||||
SC_PREVWINDOW |
Выполнить перемещение к предыдущему окну. |
|||||||||||||||||||||
SC_RESTORE |
Восстановить окно в его нормальную позицию и размеры. |
|||||||||||||||||||||
SC_SCREENSAVE |
Выполнить установленное приложение хранителя экрана. |
|||||||||||||||||||||
SC_SEPARATOR |
Никакой пункт меню не выбран, поскольку мышь находится над разделителем. |
|||||||||||||||||||||
SC_SIZE |
Изменить размеры окна. |
|||||||||||||||||||||
SCJTASKLIST |
Активизировать Task Manager (диспетчер задач) Windows. |
|||||||||||||||||||||
SC_VSCROLL |
Выполнить прокрутку по вертикали. |
|||||||||||||||||||||
В приложении можно также изменять и добавлять пункты к системному меню с использованием всех функций модификации меню, таких как AppendMenu и InsertMenuItem. При добавлении пунктов к этому меню их идентификационные значения не должны превышать OxFOOO для предотвращения конфликта с применяемыми по умолчанию идентификационными значениями, которые перечислены выше. Изменение системного меню применяется в небольших утилитах, где может оказаться нецелесообразным создание строки меню, если достаточно добавить две — три команды к системному меню. |
||||||||||||||||||||||
Синтаксис |
HMENU GetSystemMenu( HWND hWnd, BOOL bRevert ) |
|||||||||||||||||||||
Параметры |
||||||||||||||||||||||
hWnd |
HWND. Дескриптор окна, которое содержит системное меню. |
|||||||||||||||||||||
bRevert |
BOOL. Если этот параметр имеет значение TRUE, функция уничтожает текущее системное меню и восстанавливает первоначальное системное меню, определенное в Windows. Если этот параметр имеет значение FALSE, функция возвращает дескриптор копии текущего системного меню. Эта копия первоначально идентична системному меню, но может быть изменена. |
|||||||||||||||||||||
Возвращаемое значение |
HMENU. Если параметр bRevert имеет значение FALSE, возвращаемое значение — дескриптор копии системного меню. Если параметр bRevert имеет значение TRUE, возвращаемое значение — NULL. |
|||||||||||||||||||||
См. также |
CheckMenuItem, EnableMenuItem, SetMenuItemlnfo |
|||||||||||||||||||||
Пример |
См. пример для функции MenuItemFromPoint. |
|||||||||||||||||||||
InsertMenultem • Windows 98 • Windows 2000 |
||||||||||||||||||||||
Описание |
Функция InsertMenultem позволяет добавить новый пункт в любом месте указанного меню. Эта функция является более удобной по сравнению с функцией AppendMenu, которая позволяет добавлять пункты только к концу меню. |
|||||||||||||||||||||
Синтаксис |
BOOL InsertMenuItem( HMENU hMenu, UINT ultem, BOOL bByPosition, LPMENUITEMINFO Ipmii ) |
|||||||||||||||||||||
Параметры |
||||||||||||||||||||||
hMenu |
HMENU. Дескриптор меню, которое должно быть изменено. |
|||||||||||||||||||||
и It em |
UINT. Идентификатор или позиция пункта меню, перед которым должен быть вставлен новый пункт. В зависимости от значения bByPosition, этот параметр является либо идентификатором меню, либо позицией меню. |
|||||||||||||||||||||
bByPosition |
BOOL. Устанавливается в FALSE, если параметр ultem указывает идентификатор пункта меню; в ином случае устанавливается в TRUE для указания позиции пункта меню. |
|||||||||||||||||||||
Ipmii |
LPMENUTTEMINFO. Указатель на структуру MENUTTEMINFO, которая содержит информацию о новом пункте меню. См. определение структуры MENUITEMINFO в описании функции GetMenuItemlnfo |
|||||||||||||||||||||
Возвращаемое значение |
BOOL. TRUE, если пункт меню был добавлен; в ином случае возвращаемое значение — FALSE. |
|||||||||||||||||||||
Включаемый файл |
winuser.h |
|||||||||||||||||||||
См. также |
GetMenuItemlnfo, AppendMenu, SetMenuItemlnfo, GetMenu, DrawMenuBar CreateMenu, DeleteMenu, RemoveMenu |
|||||||||||||||||||||
Пример |
См. пример для функции GetSystemMenu. |
|||||||||||||||||||||
IsMenu • Windows 98 • Windows 2000 |
||||||||||||||||||||||
Описание |
Функция IsMenu применяется для проверки того, является ли дескриптор действительным дескриптором меню. |
|||||||||||||||||||||
Синтаксис |
BOOL IsMenu( HMENU hMenu ) |
|||||||||||||||||||||
Параметры |
||||||||||||||||||||||
hMenu |
HMENU. Дескриптор, который должен быть проверен. |
|||||||||||||||||||||
Возвращаемое значение |
BOOL. TRUE, если hMenu — дескриптор меню; в ином случае возвращаемое значение — FALSE. |
|||||||||||||||||||||
Включаемый файл |
winuser.h |
|||||||||||||||||||||
См. также |
GetMenu, GetSubMenu, IsWindow |
|||||||||||||||||||||
Пример |
В следующем примере функция IsMenu применяется для определения того, действительно ли пункт меню представляет собой подменю. |
|||||||||||||||||||||
См. \local-sources\chap06\06-19.txt |
||||||||||||||||||||||
LoadAccelerators • Windows 98 * Windows 2000 |
||||||||||||||||||||||
Описание |
Комбинации оперативных клавиш определяются в файле ресурса (RC). Прежде чем их можно будет использовать, в приложении необходимо вызвать функцию LoadAccelerators для выборки дескриптора таблицы оперативных клавиш. Этот дескриптор применяется в функции TranslateAccelerator для декодирования поступающих комбинаций клавиш, которые могут быть закодированы в таблице оперативных клавиш. Как и пункты меню, оперативные клавиши вырабатывают сообщение \YM_COMMAND, где в качестве параметра wParam установлено идентификационное значение оперативной клавиши. В большинстве случаев это идентификационное значение совпадает с идентификатором пункта меню, что позволяет применять оперативную клавишу для дублирования действия команды меню. Оперативные клавиши применяются в качестве клавиатурных сокращений для обычных функций, которые в ином случае могут потребовать нескольких действий мышью. Оперативные клавиши могут также использоваться для выработки командных сообщений, не имеющих эквивалентов в меню. |
|||||||||||||||||||||
Синтаксис |
HACCEL LoadAccelerators( HINSTANCE hinst, LPCTSTR IpTableName ) |
|||||||||||||||||||||
Параметры |
||||||||||||||||||||||
hinst |
HINSTANCE. Дескриптор экземпляра для модуля, содержащего определения оперативных клавиш в данных ресурса. |
|||||||||||||||||||||
Ip Table Name |
LPCTSTR. Указатель на строку с нулевым символом в конце, которая содержит имя загружаемой таблицы оперативных клавиш. Этот параметр может также указывать идентификатор ресурса с помощью макрокоманды MAKEINTRESOURCE. |
|||||||||||||||||||||
Возвращаемое значение |
HACCEL. Возвращает дескриптор таблицы оперативных клавиш, если функция была выполнена успешно; в ином случае возвращаемое значение — NULL. При многократных вызовах функция LoadAccelerators возвращает дескриптор таблицы оперативных клавиш без повторной загрузки данных. |
|||||||||||||||||||||
Включаемый файл |
winuser.h |
|||||||||||||||||||||
См. также |
TranslateAccelerator, CopyAcceleratorTable, CreateAcceleratorTable, DestroyAcceleratorTable |
|||||||||||||||||||||
Соответствующие сообщения |
||||||||||||||||||||||
WM_COMMAND |
||||||||||||||||||||||
Пример |
В следующем фрагменте кода показан типичный цикл обработки сообщений в функции WinMain с применением оперативных клавиш. Для загрузки таблицы оперативных клавиш из файла ресурса (RC) приложения может применяться функция LoadAccelerators. |
|||||||||||||||||||||
hAccel = LoadAccelerators ( hinst, szAppName ); while ( GetMessage( Smsg, NULL, 0, 0) ) { if ( ! hAccel | | ! TranslateAccelerator ( hWnd, hAccel, Smsg ) ) < TranslateMessage ( Smsg ) ; DispatchMessage ( &msg ) ; } } |
||||||||||||||||||||||
чено к окну с помощью функции SetMenu. Эта функция используется во внутренних операциях Windows, но может быть вызвана непосредственно. Функция LoadMenulndirect может служить альтернативой обычным функциям создания и модификации меню. |
||||||||||||||||||||||
Синтаксис |
HMENU LoadMenuIndirect( CONST MENUTEMPLATE* IpMenuTemplate ) |
|||||||||||||||||||||
Параметры |
||||||||||||||||||||||
lp Menu Template |
CONST MENUTEMPLATE*. Указатель на блок памяти, содержащий определение меню. Шаблон меню состоит из структуры MENUITEMTEMPLATEHEADER, за которой следуют одна или несколько смежных структур MENUITEMTEMPLATE. Расширенный шаблон меню состоит из структуры MENUEX_TEMPLATE_HEADER, за которой следуют одна или несколько смежных структур MENUEX_TEMPLATE_ITEM. См. приведенное ниже определение структур MENUITEMTEMPLATEHEADER и MENUITEMTEMPLATE. |
|||||||||||||||||||||
Возвращаемое значение |
HMENU. В случае успешного выполнения возвращаемое значение — дескриптор меню; в ином случае возвращаемое значение — NULL. |
|||||||||||||||||||||
Включаемый файл |
winuser.h |
|||||||||||||||||||||
См. также |
LoadMenu, SetMenuItemlnfo. AppendMenu, DrawMenuBar |
|||||||||||||||||||||
Определение MENUITEMTEMPLATEHEADER |
||||||||||||||||||||||
typedef struct { WORD versionNumber; WORD offset; } MENUITEMTEMPLATEHEADER; |
||||||||||||||||||||||
Члены |
||||||||||||||||||||||
versionNumber |
WORD. Этот член должен быть установлен равным 0. |
|||||||||||||||||||||
offset |
WORD. Число байтов от конца заголовка до первых данных MENUITEMTEMPLATE. Это значение обычно равно 0, при условии, что данные пункта меню располагаются в памяти сразу после заголовка. Каждый пункт меню определен в структуре данных MENUITEMTEMPLATE. Если параметр mtOption указывает тип MF_POPUP, параметр mtID должен быть опущен. |
|||||||||||||||||||||
Определение MENUITEMTEMPLATE |
||||||||||||||||||||||
typedef struct { WORD mtOption ; WORD mtID; WCHAR mtString [ 1] ; } MENUITEMTEMPLATE ; |
||||||||||||||||||||||
Члены |
||||||||||||||||||||||
mtOption |
WORD. Аналогичен параметру uFlags функции AppendMenu и может принимать значения, приведенные в табл. 6.2. |
|||||||||||||||||||||
mtID |
WORD. Идентификатор пункта меню. |
|||||||||||||||||||||
mtString |
WCHAR[1]. Первый символ строки пункта меню. Остальные символы следуют непосредственно за mtString, и в конце символьной строки находится нулевой символ. |
|||||||||||||||||||||
LoadMenu • Windows 98 • Windows 2000 |
||||||||||||||||||||||
Описание |
Функция LoadMenu загружает меню из файла ресурса приложения и возвращает дескриптор меню. Функция LoadMenu применяется в функции WinMain для загрузки главного меню программы. Функцию LoadMenu можно использовать в теле программы для загрузки новых меню в процессе работы программы. |
|||||||||||||||||||||
Синтаксис |
HMENU LoadMenu( HINSTANCE hinst, LPCTSTR IpMenuName ) |
|||||||||||||||||||||
Параметры |
||||||||||||||||||||||
hinst |
HINSTANCE. Дескриптор экземпляра для модуля, содержащего определения меню в данных ресурса. |
|||||||||||||||||||||
IpMenuName |
LPCTSTR. Указатель на строку с нулевым символом в конце, которая содержит имя загружаемого меню. Этот параметр может также указывать идентификатор ресурса с помощью макрокоманды MAKEINTRESOURCE. |
|||||||||||||||||||||
Возвращаемое значение |
||||||||||||||||||||||
HMENU. Дескриптор меню; NULL, если меню не было найдено. |
||||||||||||||||||||||
Включаемый файл |
winuser.h |
|||||||||||||||||||||
См. также |
Destroy Menu, LoadMenulndirect, Set Menu |
|||||||||||||||||||||
Пример |
В следующем примере в приложении главное меню переключается между "OLDMENU" и "NEWMENU". При выборе опции меню New Menu! из файла ресурса (RC) загружается меню "NEWMENU" и устанавливается в качестве главного меню. При выборе опции меню Old Menu! из нового меню загружается первоначальное меню и снова устанавливается в качестве главного меню. |
|||||||||||||||||||||
Определение меню в файле ресурса (.RC) OLDMENU MENU DISCARDABLE BEGIN POPUP "SFile" BEGIN MENUITEM "ESxit" , IDM_EXIT END MENUITEM "SNew Menu!" IDM_NEW END NEWMENU MENU DISCARDABLE BEGIN POPUP "SFile" BEGIN MENUITEM "ESxit" , IDM_EXIT END MENUITEM "SOld Menu!", IDMJDLD END Функция WndProc |
||||||||||||||||||||||
cm. \local-sources\chap06\06-20.txt |
||||||||||||||||||||||
LoadMenulndirect • Windows 98 • Windows 2000 |
||||||||||||||||||||||
Описание |
Функция LoadMenulndirect считывает определение меню в блок памяти и возвращает дескриптор созданного меню. Затем меню может быть подклю |
|||||||||||||||||||||
Пример |
Как показано на рис. 6.5, в следующем примере создается новое меню при обработке сообщения \VM_CREATE. Это меню определено в глобальном блоке памяти. Функция AppendMemory в нижней части листинга применяется для упрощения работы с полями переменной длины, применяемыми для определения меню. Эта функция добавляет смежные порции данных к концу блока памяти и преобразует строки в формат расширенного представления символов (Unicode). |
|||||||||||||||||||||
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.