Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT - [30]

Шрифт
Интервал

CheckedЕсли установить переключатель, то строка меню будет выделена символом √. Потом, обращаясь к специальным методам, вы сможете удалять или отображать этот символ
GrayedЕсли включить переключатель Grayed, тогда пункт меню будет отображаться серым цветом и будет недоступен для выбора пользователем. Такая возможность удобна, если вам надо сделать недоступным какие-либо возможности приложения. Впоследствии приложение может сделать пункт меню доступным. Для этого надо вызвать соответствующий метод
HelpЕсли установить переключатель Help, тогда для него будет установлено выравнивание по правому краю. Обычно этот переключатель устанавливают для меню верхнего уровня, которое управляет справочной системной приложения
InactiveЕсли включен переключатель Grayed, тогда переключатель недоступен. В противном случае вы можете установить переключатель Inactive. В этом случае пункт меню будет неактивен
Pop-upВы можете создавать многоуровневые меню. Если вы включите переключатель Pop-up, то данный пункт меню будет являться меню верхнего уровня, которое можно открыть. По умолчанию, все пункты главного меню имеют установленный переключатель Pop-up. Так как меню верхнего уровня служит только для объединения других пунктов меню, то оно не имеет идентификатора
SeparatorЕсли переключатель установлен, тогда в меню вставляется разделитель. Для разделителя все остальные поля и переключатели диалоговой панели не используются

Сохраните файл ресурсов в файле с именем MFMenu.rc. Редактор ресурсов создает кроме самого файла ресурсов еще включаемый файл, в котором определяются константы, используемые в файле ресурсов. В нашем случае в нем определяются идентификаторы меню приложения. По умолчанию этот файл сохраняется под именем resource.h . Вы можете изменить его, выбрав из меню View строку Resource Includes. Для нашего приложения мы изменили имя включаемого файла для ресурсов на MFMenuRes.h. Содержимое этого файла представлено листингом 2.8.

Листинг 2.8. Файл MFMenuRes.h

>//{{NO_DEPENDENCIES}}

>// Включаемый файл, созданный Microsoft Developer Studio

>// Используется в файле ресурсов MFMenu.rc

>//

>#define IDR_MENU 101

>#define ID_TEST_BEEP 40001

>#define ID_TEST_EXIT 40002


>// Следующие значения идентификаторов используются по

>// умолчанию для новых объектов

>#ifdef APSTUDIO_INVOKED

> #ifndef APSTUDIO_READONLY_SYMBOLS

>  #define _APS_NEXT_RESOURCE_VALUE 102

>  #define _APS_NEXT_COMMAND_VALUE  40003

>  #define _APS_NEXT_CONTROL_VALUE  1000

>  #define _APS_NEXT_SYMED_VALUE    101

> #endif

>#endif

В листинге 2.9 мы привели файл ресурсов MFMenuRes.rc приложения. Этот файл был подготовлен редактором ресурсов Visual C++. Одна из первых строк файла содержит директиву #include которой подключается файл MFMenuRes.h, содержащий описание идентификаторов ресурсов (листинг 2.8).

Среди прочих служебных строк, необходимых редактору ресурсов и компилятору Visual C++, вы можете обнаружить описание меню приложения IDR_MENU. Для первого приложения, использующего ресурсы мы привели файл ресурсов полностью. Впоследствии мы ограничимся словесным описанием ресурсов и будем приводить только выдержки из файла ресурсов.

Листинг 2.9. Файл MFMenuRes.rc

>// Файл описания ресурсов приложения, созданный

>// Microsoft Developer Studio

>#include "MFMenuRes.h"


>#define APSTUDIO_READONLY_SYMBOLS

>//////////////////////////////////////////////////////////////

>// Включаем файл afxres.h, содержащий определения стандартных

>// идентификаторов

>#include "afxres.h"


>//////////////////////////////////////////////////////////////

>#undef APSTUDIO_READONLY_SYMBOLS


>//////////////////////////////////////////////////////////////

>// Руссификацированные ресурсы

>#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS)

> #ifdef _WIN32

>  LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT

> #pragma code_page(1251)

> #endif //_WIN32


> ////////////////////////////////////////////////////////////

> // Меню

> //

> IDR_MENU MENU DISCARDABLE

> BEGIN

>  POPUP "Test"

>  BEGIN

>   MENUITEM "Beep", ID_TEST_BEEP

>   MENUITEM SEPARATOR

>   MENUITEM "Exit", ID_TEST_EXIT

>  END

> END


> #ifdef APSTUDIO_INVOKED


>  ////////////////////////////////////////////////////////

>  // Ресурсы TEXTINCLUDE

>  //

>  1 TEXTINCLUDE DISCARDABLE

>  BEGIN

>   "MFMenuRes.h\0"

>  END


>  2 TEXTINCLUDE DISCARDABLE

>  BEGIN

>   "#include ""afxres.h""\r\n"

>   "\0"

>  END


>  3 TEXTINCLUDE DISCARDABLE

>  BEGIN

>   "\r\n"

>   "\0"

>  END


> #endif // APSTUDIO_INVOKED


>#endif // Руссификацированные ресурсы


>//////////////////////////////////////////////////////////////

>#ifndef APSTUDIO_INVOKED

>#endif


Когда вы создадите ресурсы приложения и включите файл ресурсов в проект обратите внимание на окно Project Workspace. В нем появится еще одна, четвертая страница ResourceView (рис. 2.24). Эта страница показывает все ресурсы, входящие в проект. В приложении MFMenu определен только один ресурс – меню, имеющее идентификатор IDR_MENU.

Вы можете быстро перейти к редактированию меню, если выберите его идентификатор и щелкните два раза левой кнопкой мыши.

Рис. 2.24. Страница ResourceView окна Project Workspace


Теперь проект готов. Вы можете построить его и запустить полученное приложение MFMenu. Внешний вид приложения представлен на рисунке 2.25. Как видите окно приложения имеет меню Test, состоящее из двух строк – Beep и Exit.


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.