Ресурсы шаблона документов
Если мы не поленимся и создадим для второго шаблона документов все остальные перечисленные выше ресурсы, то приложение действительно будет вести себя в соответствии с концепцией MDI, так как она трактуется компанией Microsoft. Это означает, что приложение будет следить за типом активного документа и автоматически изменять связанные с ним ресурсы (значок и меню). К сожалению, автоматическая смена панели инструментов все-таки потребует некоторых усилий. Имя текущего документа совпадает с именем файла, в котором он хранится, но если документ еще не был сохранен, то его имя генерируется автоматически и также зависит от выбранного шаблона.
Перейдите в окно Resource View и откройте в дереве ресурсов узел Icon. Вы видите индексы двух значков, которые сгенерированы мастером AppWizard и служат для идентификации приложения (IDR_MA IN FRAME) и его документов (IDR_TreeTYPE). При желании вы можете отредактировать изображения, открыв их в окне редактора или, что проще, заменив их на другие. Техника замены проста: открыть готовое изображение в рамках Studio .NET (их много по адресу …\Microsoft Visual Studio .NET\Common7\Graphics\icons), скопировать в буфер, открыть существующий значок, нажать Delete и CTRL + V. He забывайте, что на самом деле имеется 4 значка (2 маленьких и 2 больших). Переход между изображениями значков разных размеров производится в диалоге, вызываемом командой Image › Open › Image › Type. Команда доступна, когда курсор стоит в окне редактора изображений. Теперь опишем, как добавить еще один значок.
- Вызовите контекстное меню на узле дерева IDR_TreeTYPE и дайте команду Insert Copy.
- В окне диалога измените язык ресурса на любой другой, нажмите ОК, переведите курсор на новый узел дерева ресурсов и перейдите в окно Properties.
- Измените идентификатор на IDR_DrawTYPE и верните язык. К сожалению, в моей версии изменения происходят только после того, как будет дана команда Save.
- Замените новые изображения, большое и маленькое, на какие-то другие.
Откройте в окне редактора меню IDR_TreeTYPE. Удалите из меню File команды Print, Print Preview, Print Setup и один разделитель (Separator). Повторите действия по копированию ресурсов и сделайте копию всего меню IDR_TreeTYPE. Поменяйте идентификатор копии на IDR_DrawTYPE. Откройте копию меню в окне редактора и уберите из него команду View › Split и добавьте View › Documents с идентификатором ID_VIEW_TOGGLE. В пункт меню Edit добавьте две новые команды: New Poly и Poly Color….
Вновь откройте меню IDR_TreeTYPE, удалите в нем весь пункт меню Edit, добавьте команды View › Geometry с идентификатором ID_VIEW_TOGGLE и View › Refresh с идентификатором ID_VIEW_REFRESH. Команда ID_VIEW_70GGLE будет служить для переключения между двумя окнами CTreeFrame и CDrawFrame, содержащими три представления одного и того же документа.
В том и другом из рассматриваемых меню измените команду Window › Tile на Window › Tile Horizontally и добавьте новую команду Window › Tile Vertically, выбрав из выпадающего списка идентификатор ID_WINDOW_TILE_VERT. Обработчики этих команд уже существуют в каркасе приложения, поэтому нам не нужно их создавать.
Откройте инструментальную панель (Toolbar) IDR_MAINFRAME. Удалите из нее кнопки вырезания, копирования, вставки и печати. Используя технику копирования, добавьте две новые инструментальные панели: IDR_TreeTYPE и IDR_DrawTYPE. В последнюю вставьте две новые кнопки, соответствующие двум командам меню: New Poly и Poly Color…. Добавьте два новых курсора, которые будут использованы в разные моменты жизни приложения. Один будет загружаться автоматически при попадании фокуса в окна демонстрации содержимого документов (типа CWndGeom). Другой будет использован в режиме визуального редактирования данных документа.
- Вызовите контекстное меню в окне Resource View и дайте команду Add Resource.
- В списке диалога выберите Cursor и нажмите кнопку New.
- Задайте идентификатор IDC_MYHAND и скопируйте изображение курсора H_POINT.CDR из папки Cursors студии.
- Повторите эти действия для создания курсора IDC_MOVE с изображением, скопированным из файла 4WAY02.CUR.
Если вы вместо IDC_MYHAND зададите IDC_HAND, то компилятор многократно сообщит о переопределении стандартного курсора с таким индексом. Внесите еще одно изменение, связанное с ресурсами. Так как мы сами будем перезагружать инструментальные панели, то надо упростить доступ к ним. В файле MainFrm.h перенесите следующие два объявления из секции protected в секцию public:
public: CToolBar m_wndToolBar; CStatusBar m_wndStatusBar;