Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
System programming / Конспект лекций / Лекция 8 Ресурсы часть 2.doc
Скачиваний:
45
Добавлен:
08.05.2015
Размер:
83.97 Кб
Скачать

Этикет при организации меню

Формат всплывающих меню File и Edit в программах для Windows обычно имеет аналогичный вид. Одной из задач Windows является обеспечение пользователя таким интерфейсом, при котором для каждой новой программы не требуется изучение базовых кон­цепций. Этому, несомненно, помогает то, что меню File и Edit выглядят одина­ково в любой программе для Windows, а также то, что для выбора используют­ся одни и те же комбинации символьных клавиш и клавиши <Alt>.

За исключением всплывающих меню File и Edit, остальные пункты меню программ для Windows отличаются от программы к программе. При созда­нии меню вам необходимо изучить существующие программы для Windows и стремиться к поддержанию некоторого стандарта. Конечно, если вы счи­таете эти другие программы неправильными, и знаете лучший путь их соз­дания, никто не посмеет вас остановить. Кроме этого запомните, что для исправления меню обычно требуется исправить только файл описания ресурсов, а не код программы.

Сложный способ определения меню

Определение меню в файле описания ресурсов — это, как правило, про­стейший способ добавить меню к окну программы, но этот способ — не единственный. Вы можете обойтись без файла описания ресурсов и, с по­мощью вызовов функций 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") ;

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") ;

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