Bообще говоря, в принципе, можно определить
комбинации клавиш акселерации, не только дублирующие строки меню, но и
вызывающие передачу других командных сообщений.
Для создания и изменения таблиц акселераторов следует использовать редактор
ресурсов Microsoft Visual C++. Он позволяет
определить соответствие комбинаций клавиш и идентификаторов командных
сообщений.
Для приложений, имеющих оконный интерфейс и созданных с использованием
MFC AppWizard, таблица акселераторов с
идентификатором IDR_MAINFRAME создается
автоматически. Загружается же она приложением во время создания главного
окна.
Например, таблица акселераторов с идентификатором IDR_MAINFRAME загружается многооконным приложением во время создания
главного окна методом LoadFrame ,
вызываемом в методе InitInstance главного класса приложения. Метод LoadFrame
также используется для одновременной загрузки и
ряда других ресурсов (меню, таблицы текстовых строк, пиктограммы), имеющих
одинаковый идентификатор ресурса : CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame->LoadFrame(IDR_MAINFRAME)) return FALSE;
pMainFrame->ShowWindow(m_nCmdShow);
pMainFrame->UpdateWindow();
m_pMainWnd = pMainFrame;
Каждый тип документа может иметь собственную таблицу акселераторов. Эта
таблица будет загружена автоматически вместе
с меню (и некоторыми другими ресурсами), когда пользователь откроет окно
просмотра документа данного типа.
Чтобы определить таблицу акселераторов для документов данного типа, надо
просто включить ее в файл ресурсов приложения, присвоив ей идентификатор данного
типа документов (например,
IDR_MULTITYPE). Тогда, если в список
шаблонов документов приложения при добавлен шаблон документа типа
IDR_MULTITYPE, то при создании окна
просмотра для документа этого типа будет загружатся соответствующая таблица
акселераторов. Шаблон документа добавляется в список шаблонов следующим
образом : AddDocTemplate(new CMultiDocTemplate(IDR_MULTITYPE,
RUNTIME_CLASS(CMultiDoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CMultiView)));
Если документ создается без использования средств MFC AppWizard и модели ' Document-View', то можно загрузит таблицу акселераторов с помощью
метода LoadAccelTable , входящего в
состав класса CFrameWnd . В качестве
параметра этому методу следует указать имя ресурса таблицы акселераторов. Если
таблица акселераторов вместо строкового имени имеет числовой идентификатор, то
необходимо воспользоваться макрокомандой MAKEINTRESOURCE.
|