Ресурсы приложения

Ресурсы приложения

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

Шаблон меню

Большой интерес для нас представляет ресурс, описывающий меню приложения. В ресурсах приложения определен только один шаблон меню, имеющий идентификатор IDR_MAINFRAME.

Когда пользователь выбирает строки меню, операционная система передает командное сообщение главному окну приложения.

//////////////////////////////////////////////////////////////

// Меню

IDR_MAINFRAME MENU PRELOAD DISCARDABLE

BEGIN

 POPUP "&File"

 BEGIN

  MENUITEM "&New Ctrl+N", ID_FILE_NEW

  MENUITEM "&Open… Ctrl+O", ID_FILE_OPEN

  MENUITEM "&Save Ctrl+S", ID_FILE_SAVE

  MENUITEM "Save &As…", ID_FILE_SAVE_AS

  MENUITEM SEPARATOR

  MENUITEM "&Print… Ctrl+P",ID_FILE_PRINT

  MENUITEM "Print Pre&view", ID_FILE_PRINT_PREVIEW

  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 "&Edit"

 BEGIN

  MENUITEM "&Undo Ctrl+Z", ID_EDIT_UNDO

  MENUITEM SEPARATOR

  MENUITEM "Cu&t Ctrl+X", ID_EDIT_CUT

  MENUITEM "&Copy Ctrl+C", ID_EDIT_COPY

  MENUITEM "&Paste Ctrl+V", ID_EDIT_PASTE

 END

 POPUP "&View"

 BEGIN

  MENUITEM "&Toolbar", ID_VIEW_TOOLBAR

  MENUITEM "&Status Bar", ID_VIEW_STATUS_BAR

 END

 POPUP "&Help"

 BEGIN

  MENUITEM "&About Single…", ID_APP_ABOUT

 END

END

Большая часть строк меню IDR_MAINFRAME имеет стандартные идентификаторы, описанные в библиотеке MFC. Некоторые из команд, соответствующих этим идентификаторам полностью обрабатываются MFC. Список стандартных команд с их описанием представлен в разделе “Стандартные команды”.

Панель управления toolbar

Многие современные приложения, в том числе все приложения имеющие оконный интерфейс и созданные с использованием средств MFC AppWizard, имеют панель управления. Эта панель располагается как правило ниже меню главного окна приложения и содержит ряд кнопок.

//////////////////////////////////////////////////////////////

// Панель управления Toolbar

IDR_MAINFRAME TOOLBAR DISCARDABLE 16, 15

BEGIN

 BUTTON ID_FILE_NEW

 BUTTON ID_FILE_OPEN

 BUTTON ID_FILE_SAVE

 SEPARATOR

 BUTTON ID_EDIT_CUT

 BUTTON ID_EDIT_COPY

 BUTTON ID_EDIT_PASTE

 SEPARATOR

 BUTTON ID_FILE_PRINT

 BUTTON ID_APP_ABOUT

END

Обратите внимание, что идентификаторы кнопок панели управления соответствуют идентификаторам некоторых строк меню приложения. Поэтому эти кнопки дублируют соответствующие строки меню.

Образ кнопок панели управления расположен в файле Toolbar.bmp, записанном в подкаталоге res каталога проекта.

//////////////////////////////////////////////////////////////

// Изображение Bitmap, определяющее кнопки приложения

IDR_MAINFRAME BITMAP MOVEABLE PURE "res\Toolbar.bmp"

Пиктограмма

В файле ресурсов приложения Single определены две пиктограммы IDR_SINGLETYPE и IDR_MAINFRAME. Каждая из этих пиктограмм содержит по два изображения различного размера 32?32 и 16?16 пикселов.

//////////////////////////////////////////////////////////////

// Пиктограммы

IDR_MAINFRAME ICON DISCARDABLE "res\Single.ico"

IDR_SINGLETYPE ICON DISCARDABLE "res\SingleDoc.ico"

Пиктограмма IDR_MAINFRAME представляет минимизированное приложение (рис. 5.11). Эта же пиктограмма отображается в левом верхнем углу главного окна приложения.

Рис. 5.11. Пиктограмма IDR_MAINFRAME

Точно такая же пиктограмма используется всеми приложениями, построенными на основе MFC AppWizard, вне зависимости от типа их интерфейса с пользователем.

Пиктограмма IDR_SINGLETYPE может быть использована для представления документа, с которым работает приложение (рис. 5.12). Приложение с однооконным интерфейсом практически не использует эту пиктограмму.

Рис. 5.12. Пиктограмма IDR_SINGLETYPE

Таблица текстовых строк

Одним из наиболее объемных ресурсов приложения является таблица текстовых строк. В ней определены название главного окна приложения, строки, отображаемые в панели состояния и т. д.

Ресурсы приложения содержат несколько блоков, описывающих таблицы текстовых строк. Рассмотрим их подробнее. Первый блок текстовых строк включает только одну текстовую строку, имеющую идентификатор IDR_MAINFRAME. В этой строке закодирована различная информация, относящаяся к типу документов приложения. Обычно для каждого типа документа приложения определена своя строка описания.

//////////////////////////////////////////////////////////////

// Таблица текстовых строк

STRINGTABLE PRELOAD DISCARDABLE

BEGIN

 IDR_MAINFRAME "Single Single Single.Document Single Document"

END

Строка описания типа документа (IDR_MAINFRAME) состоит из семи фрагментов, разделенных символами перевода строки . Эти фрагменты строки отвечают за различные характеристики документа.

Формирование этой строки выполняется MFC AppWizard на основании информации, которую вы указали на страница Document Template Strings диалоговой панели Advanced Options (рис. 5.6).

Фрагмент Поле панели Advanced Options Описание Первый Main frame caption Заголовок главного окна приложения. Используется для приложений с однооконным интерфейсом Второй Doc type name (только для приложений с многооконным интерфейсом), для приложений с однооконным интерфейсом этот фрагмент изначально пуст Имя файла, присваиваемое новому документу по умолчанию. Если этот фрагмент отсутствует, используется имя Untitled Третий File new name (OLE short name) Название типа документа. Если в приложении определено несколько типов документов (обычно используется для приложений с многооконным интерфейсом), то при создании нового документа отображается диалоговая панель, из которой вы должны выбрать название типа создаваемого документа Четвертый Filter name Название фильтра для имен файлов документов данного типа. Это название отображается в стандартных диалоговых панелях Open и Save As, в списке типов документов Пятый File extension Расширение файлов документов данного типа, используемое по умолчанию Шестой File type ID Идентификатор, под которым данный тип документов заносятся в регистрационную базу Windows 95. Вы можете просмотреть регистрационную базу Windows 95 при помощи приложения REGEDIT. Седьмой File type name (OLE long name) Тип файлов, используемых для хранения документов данного типа. Также используется в качестве длинного имени объекта OLE, если приложение использует OLE технологию

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

Второй блок таблицы текстовых строк содержит две строки с идентификаторами AFX_IDS_APP_TITLE и AFX_IDS_IDLEMESSAGE. Строка, имеющая идентификатор AFX_IDS_IDLEMESSAGE, отображается в панели состояния, когда приложение находится в состоянии ожидания.

Когда пользователь создает объект главного класса приложения, он может указать имя приложения. Если это имя не указано, как в нашем приложении, тогда в качестве имени приложения используется строка, имеющая идентификатор AFX_IDS_APP_TITLE.

STRINGTABLE PRELOAD DISCARDABLE

BEGIN

 AFX_IDS_APP_TITLE "Single"

 AFX_IDS_IDLEMESSAGE "Ready"

END

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

STRINGTABLE DISCARDABLE

BEGIN

 ID_INDICATOR_EXT "EXT"

 ID_INDICATOR_CAPS "CAP"

 ID_INDICATOR_NUM "NUM"

 ID_INDICATOR_SCRL "SCRL"

 ID_INDICATOR_OVR "OVR"

 ID_INDICATOR_REC "REC"

END

И наконец, последний, самый большой блок текстовых строк содержит краткие описания каждой строки меню приложения. Идентификаторы этих строк соответствуют идентификаторам строк меню, которые они описывают.

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

STRINGTABLE DISCARDABLE

BEGIN

 ID_FILE_NEW "Create a new document New"

 ID_FILE_OPEN "Open an existing document Open"

 ID_FILE_CLOSE "Close the active document Close"

 ID_FILE_SAVE "Save the active document Save"

 ID_FILE_SAVE_AS "Save the active document with a new name Save As"

 ID_FILE_PAGE_SETUP "Change the printing options Page Setup"

 ID_FILE_PRINT_SETUP "Change the printer and printing options Print Setup"

 ID_FILE_PRINT "Print the active document Print"

 ID_FILE_PRINT_PREVIEW "Display full pages Print Preview"

 ID_APP_ABOUT " Display program information, version number and copyright About"

 ID_APP_EXIT "Quit the application; prompts to save documents Exit"

 ID_FILE_MRU_FILE1 "Open this document"

 ID_FILE_MRU_FILE2 "Open this document"

 ID_FILE_MRU_FILE3 "Open this document"

 ID_FILE_MRU_FILE4 "Open this document"

 ID_FILE_MRU_FILE5 "Open this document"

 ID_FILE_MRU_FILE6 "Open this document"

 ID_FILE_MRU_FILE7 "Open this document"

 ID_FILE_MRU_FILE8 "Open this document"

 ID_FILE_MRU_FILE9 "Open this document"

 ID_FILE_MRU_FILE10 "Open this document"

 ID_FILE_MRU_FILE11 "Open this document"

 ID_FILE_MRU_FILE12 "Open this document"

 ID_FILE_MRU_FILE13 "Open this document"

 ID_FILE_MRU_FILE14 "Open this document"

 ID_FILE_MRU_FILE15 "Open this document"

 ID_FILE_MRU_FILE16 "Open this document"

 ID_NEXT_PANE "Switch to the next window pane Next Pane"

 ID_PREV_PANE "Switch back to the previous window pane Previous Pane"

 ID_WINDOW_SPLIT "Split the active window into panes Split"

 ID_EDIT_CLEAR "Erase the selection Erase"

 ID_EDIT_CLEAR_ALL "Erase everything Erase All"

 ID_EDIT_COPY "Copy the selection and put it on the Clipboard Copy"

 ID_EDIT_CUT "Cut the selection and put it on the Clipboard Cut"

 ID_EDIT_FIND "Find the specified text Find"

 ID_EDIT_PASTE "Insert Clipboard contents Paste"

 ID_EDIT_REPEAT "Repeat the last action Repeat"

 ID_EDIT_REPLACE "Replace specific text with different text Replace"

 ID_EDIT_SELECT_ALL "Select the entire document Select All"

 ID_EDIT_UNDO "Undo the last action Undo"

 ID_EDIT_REDO "Redo the previously undone action Redo"

 ID_VIEW_TOOLBAR "Show or hide the toolbar Toggle ToolBar"

 ID_VIEW_STATUS_BAR "Show or hide the status bar Toggle StatusBar"

END

Диалоговая панель

В ресурсах приложения определена только одна диалоговая панель с идентификатором IDD_ABOUTBOX. Она содержит краткую информацию о приложении и отображается на экране, когда пользователь выбирает из меню Help строку About Single.

//////////////////////////////////////////////////////////////

// Диалоговая панель

IDD_ABOUTBOX DIALOG DISCARDABLE 0, 0, 217, 55

CAPTION "About Single"

STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU

FONT 8, "MS Sans Serif"

BEGIN

 ICON IDR_MAINFRAME,IDC_STATIC,11,17,20,20

 LTEXT "Single Version 1.0",IDC_STATIC,40,10,119,8, SS_NOPREFIX

 LTEXT "Copyright 251 1996",IDC_STATIC,40,25,119,8

 DEFPUSHBUTTON "OK",IDOK,178,7,32,14,WS_GROUP

END

Таблица акселераторов

Чтобы ускорить доступ к строкам меню приложения, MFC AppWizard добавляет в файл ресурсов таблицу акселераторов. Когда пользователь нажимает комбинацию клавиш, представленную в таблице акселераторов, приложению поступает командное сообщение с соответствующим идентификатором.

//////////////////////////////////////////////////////////////

// Таблица акселераторов

IDR_MAINFRAME ACCELERATORS PRELOAD MOVEABLE PURE

BEGIN

 "N", ID_FILE_NEW, VIRTKEY,CONTROL

 "O", ID_FILE_OPEN, VIRTKEY,CONTROL

 "S", ID_FILE_SAVE, VIRTKEY,CONTROL

 "P", ID_FILE_PRINT, VIRTKEY,CONTROL

 "Z", ID_EDIT_UNDO, VIRTKEY,CONTROL

 "X", ID_EDIT_CUT, VIRTKEY,CONTROL

 "C", ID_EDIT_COPY, VIRTKEY,CONTROL

 "V", ID_EDIT_PASTE, VIRTKEY,CONTROL

 VK_BACK, ID_EDIT_UNDO, VIRTKEY,ALT

 VK_DELETE, ID_EDIT_CUT, VIRTKEY,SHIFT

 VK_INSERT, ID_EDIT_COPY, VIRTKEY,CONTROL

 VK_INSERT, ID_EDIT_PASTE, VIRTKEY,SHIFT

 VK_F6, ID_NEXT_PANE, VIRTKEY

 VK_F6, ID_PREV_PANE, VIRTKEY,SHIFT

END

Версия

Как и каждое приложение, созданное средствами MFC AppWizard, приложение Single включает ресурс, описывающий версию приложения. В этом ресурсе содержится информация о приложении и ее версии, данные о фирме-разработчике, авторские права.

Приложения, как правило, имеют только один ресурс, содержащий данные о версии, и который имеет имя VS_VERSION_INFO. Приложение может получить данные из ресурса, описывающего версию приложения. Для этого можно воспользоваться функциями GetFileVersionInfo и VerQueryValue.

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

Общие замечания о ресурсах приложения

Внимательно изучив различные ресурсы приложения Single вы должны заметить, что четыре типа ресурсов имеют элементы с одинаковым идентификатором. Существует меню, строковый ресурс, таблица акселераторов и пиктограмма, которые имеют один и тот же идентификатор IDR_MAINFRAME.