Сложный способ определения меню
Определение меню в файле описания ресурсов — это, как правило, простейший способ добавить меню к окну программы, но этот способ — не единственный. Вы можете обойтись без файла описания ресурсов и, с помощью вызовов функций CreateMenu и AppendMenu, создать все меню внутри программы. После
завершения определения меню, можно передать описатель меню функции Create Window или использовать функцию SetMenu для установки меню окна.
Теперь о том, как это делается. Возвращаемым значением функции CreateMenu является просто описатель нового меню:
hMenu = CreateMenu () ;
В исходном состоянии меню не содержит ни одного элемента. Элементы в меню вставляются с помощью функции AppendMenu. Вам необходимо получить свой описатель меню для каждого пункта главного меню и для каждого всплывающего меню. Всплывающие меню строятся отдельно, а затем их описатели вставляются в меню верхнего уровня.
hMenu = CreateMenu ( ) ;
hMenuPopup = CreateMenu ( ) ;
AppendMenu (hMenuPopup, MF_STRING, IDM_NEH, "&New") ;
AppendMenu (hMenuPopup, MF_STRING, IDM_OPEN, " & Open...") ;
AppendMenu (hMenuPopup, MF_STRING, IDM SAVE, "&Save") ;
AppendMenu (hMenuPopup, MF_STRING, IDM_SAVEAS, "Save &As...") ;
AppendMenu (hMenuPopup, MF_SEPARATOR, 0, NULL) ;
AppendMenu (hMenuPopup, MP_STRING, IDM_EXIT, "E&xit") ;
AppendMenu (hMenu, MF_POPUP, (UINT) hMenuPopup, "&File") ;
hMenuPopup = CreateMenu () ;
AppendMenu (hMenuPopup, MF STRING, IDM UNDO, " & Undo") ;
AppendMenu (hMenuPopup, MF_SEPARATOR, 0, NULL) ;
AppendMenu (hMenuPopup, MF_STRING, IDM_CUT, "Cu&t") ;
AppendMenu (hMenuPopup, MF_STRING, IDM_COPY, " & Copy") ;
AppendMenu (hMenuPopup, MP_STRING, IDM_PASTE, " & Paste") ;
AppendMenu (hMenuPopup, MF_STRING, IDMJ3EL, "De&lete") ;
AppendMenu (hMenu, MF_POPUP, (UINT) hMenuPopup, " & Edit") ;
hMenuPopup' = CreateMenu () ;
AppendMenu (hMenuPopup, MF_STRING I MF_CHECKED, IDM_WHITE, "&White") ;
AppendMenu (hMenuPopup, MF_STRING, IDM_LTGRAY, "&Lt Gray") ;
AppendMenu (hMenuPopup, MF_STRING, IDM_GRAY, "&Gray") ;
– 59 –
AppendMenu (hMenuPopup, MF_STRING, IDM_DKGRAY, "&Dk Gray") ;
AppendMenu (hMenuPopup, MF_STRING, IDM_BLACK, "&SBlack") ;
AppendMenu (hMenu, MF_POPUP, (UINT) hMenuPopup, "{&Background") ;
hMenuPopup = CreateMenu () ;
AppendMenu (hMenuPopup, MF STRING, IDM START, "&Start") ;
AppendMenu (hMenuPopup, MF_STRING I MF_GRAYED, IDM_STOP, "S&top") ;
AppendMenu (hMenu, MF_POPUP, (UINT) hMenuPopup, "&Timer") ;
hMenuPopup = CreateMenu () ;
AppendMenu (hMenuPopup, MF_STRING, IDM_HELP, "&Help...") ;
AppendMenu (hMenuPopup, MF_STRING, IDM_ABOUT, " &About MenuDemo ...") ;
AppendMenu (hMenu, MF_POPUP, (UINT) hMenuPopup, "&Help") ;
Не рекомендуется определять меню таким образом, а только показано, как это можно сделать. Несомненно, что вы могли бы существенно уменьшить размер кода, используя массивы структур, содержащие строки символов, идентификаторы и флаги всех пунктов меню. Действуя таким образом, вы получите преимущества при использовании третьего способа определения меню.
Дата добавления: 2016-11-22; просмотров: 567;