Меню, а не собственные меню, могут установить мнемонический знак меню, вставляя символ подчеркивания рядом с буквой в строке меню. Это дает возможность пользователю выбрать меню, нажимая ALT и букву мнемонического знака. Но в собственных меню Вы не сможете установить мнемонический знак меню этим способом. Вместо этого ваше приложение должно обработать сообщение WM_MENUCHAR, чтобы обеспечить собственные меню мнемоникой.
Сообщение WM_MENUCHAR отправляется тогда, когда пользователь вводит с клавиатуры мнемонический знак меню, который не соответствует ни одной предопределенной мнемонике текущего меню. Значение, содержавшее в wParam определяет символ ASCII, который соответствует клавише пользователя, нажатой с клавишей ALT. Младшее слово wParam устанавливает тип выбранного меню и может быть одним из ниже перечисленных значений:
Значение | Предназначение |
MF_POPUP | Если текущее меню является подменю. |
MF_SYSMENU | Если меню является системным меню. |
Старшее слово wParam содержит дескриптор текущего меню. Окно с собственными меню может обработать WM_MENUCHAR как ниже указано:
case WM_MENUCHAR: nIndex = Индекс пункта меню обуславливается выбором символа, который был введен с клавиатуры и дескриптором потока меню. return MAKELRESULT(nIndex, 2); |
Двойка в старшем слове возвращаемого значения сообщает системе, что младшее слово возвращаемого значения содержит для выбора пункта меню индекс, отсчитываемый от нуля.
Ниже следующее константы соответствуют возможным возвращаемым значениям из сообщения WM_MENUCHAR.
Константа | Значение | Предназначение |
---|---|---|
MNC_IGNORE | 0 | Система должна отвергнуть символ нажатый пользователем и создать короткий гудок системного динамика компьютера. |
MNC_CLOSE | 1 | Система должна закрыть активное меню. |
MNC_EXECUTE | 2 | Система должна выбрать пункт, определяемый в младшем слове возвращаемого значения. Окно владелец получает сообщение WM_COMMAND. |
MNC_SELECT | 3 | Система должна выбрать пункт, определяемый в младшем слове возвращаемого значения. |