Шаблон меню
Для многооконного приложения в ресурсах проекта определены два меню с идентификаторами IDR_MAINFRAME и IDR_MULTITYPE. Приложение использует одно из этих меню, в зависимости от того, открыт документ или нет.
Меню с идентификатором IDR_MAINFRAME используется, если в приложении не открыт ни один документ. Как видите, идентификатор меню совпадает с идентификатором меню приложения с однооконным интерфейсом, однако строки этих меню различаются:
>//////////////////////////////////////////////////////////////// Меню IDR_MAINFRAME
>IDR_MAINFRAME MENU PRELOAD DISCARDABLE
>BEGIN
> POPUP "&File"
> BEGIN
> MENUITEM "&New\tCtrl+N", ID_FILE_NEW
> MENUITEM "&Open...\tCtrl+O",ID_FILE_OPEN
> MENUITEM SEPARATOR
> MENUITEM "P&rint Setup...", ID_FILE_PRINT_SETUP
> MENUITEM SEPARATOR
> MENUITEM "Recent File", ID_FILE_MRU_FILE1, GRAYED
> MENUITEM SEPARATOR
> MENUITEM "E&xit", ID_APP_EXIT
> END
> POPUP "&View"
> BEGIN
> MENUITEM "&Toolbar", ID_VIEW_TOOLBAR
> MENUITEM "&Status Bar", ID_VIEW_STATUS_BAR
> END
> POPUP "&Help"
> BEGIN
> MENUITEM "&About Multi...", ID_APP_ABOUT
> END
>END
Меню, имеющее идентификатор IDR_MULTITYPE, отображается, когда пользователь создает новый документ или открывает документ, уже записанный в файле на диске.
Как видите, в этом меню определено временное меню Window, строки которого служат для управления MDI окнами приложения:
>//////////////////////////////////////////////////////////////// Меню IDR_MAINFRAME
>IDR_MAINFRAME MENU PRELOAD DISCARDABLE
>BEGIN
> POPUP "&File"
> BEGIN
> MENUITEM "&New\tCtrl+N", ID_FILE_NEW
> MENUITEM "&Open...\tCtrl+O", ID_FILE_OPEN
> MENUITEM SEPARATOR
> MENUITEM "P&rint Setup...", ID_FILE_PRINT_SETUP
> MENUITEM SEPARATOR
> MENUITEM "Recent File", ID_FILE_MRU_FILE1, GRAYED
> MENUITEM SEPARATOR
> MENUITEM "E&xit", ID_APP_EXIT
> END
> POPUP "&View"
> BEGIN
> MENUITEM "&Toolbar", ID_VIEW_TOOLBAR
> MENUITEM "&Status Bar", ID_VIEW_STATUS_BAR
> END
> POPUP "&Help"
> BEGIN
> MENUITEM "&About Multi...", ID_APP_ABOUT
> END
>END
Большинство строк меню приложения Multi имеет стандартные идентификаторы. Соответствующие им стандартные командные сообщения обрабатываются различными классами библиотеки MFC. Так, например, стандартное командное сообщение с идентификатором ID_FILENEW от строки New меню File, по умолчанию обрабатывается методом OnFileNew класса CWinApp. Мы уже рассказывали о стандартных командных сообщениях в 24 томе из серии “Библиотека системного программиста”. Более подробное описание стандартных командных сообщений вы можете найти в документации Microsoft Visual C++.
В этой книге мы посвятили меню приложений отдельную главу, которая называется “Меню, панели управления и панели состояния”. Дополнительную информацию об использовании меню вы можете получить в 13 томе серии “Библиотека системного программиста”.
Пиктограмма
В файле ресурсов приложения Multi определены две пиктограммы IDR_MULTITYPE и IDR_MAINFRAME. Каждая из этих пиктограмм содержит по два изображения размером 32×32 и 16×16 пикселов. Внешний вид пиктограмм соответствует пиктограммам, используемым приложением с однооконным интерфейсом. Для однооконного приложения пиктограмма, представляющая документ, называлась IDR_SINGLETYPE, а не IDR_MULTITYPE. Такая разница в названиях возникла исключительно из-за разницы в названиях проектов приложений:
>//////////////////////////////////////////////////////////////
>// Пиктограммы
>IDR_MAINFRAME ICON DISCARDABLE "res\\Multi.ico"
>IDR_MULTITYPE ICON DISCARDABLE "res\\MultiDoc.ico"
Пиктограмма IDR_MAINFRAME представляет приложение, когда оно минимизировано (рис. 1.4). Эта же пиктограмма отображается в левом верхнем углу главного окна приложения.
Рис. 1.4. Пиктограмма IDR_MAINFRAME
Пиктограмма IDR_MULTITYPE используется для представления документа с которым работает приложение (рис. 1.5). В отличие от приложения с однооконным интерфейсом, которое не использует эту пиктограмму, приложение с многооконным интерфейсом отображает пиктограмму IDR_MULTITYPE в левом верхнем углу окна документа.
Рис. 1.5. Пиктограмма IDR_MULTITYPE