TN022. Реализация стандартных команд
Примечание.
Следующее техническое примечание не было обновлено, поскольку сначала оно было включено в электронную документацию. В результате некоторые процедуры и разделы могут быть устаревшими или неверными. Для получения последних сведений рекомендуется выполнить поиск интересующей темы в алфавитном указателе документации в Интернете.
В этой заметке описываются стандартные реализации команд, предоставляемые MFC 2.0. Ознакомьтесь с технической заметкой 21 , так как она описывает механизмы, используемые для реализации многих стандартных команд.
Это описание предполагает знание архитектур MFC, API и распространенных методик программирования. Описаны документированные и незадокументированные API-интерфейсы "только реализации". Это не место, чтобы начать изучать функции или как программировать в MFC. Дополнительные сведения о документированных API см. в Visual C++.
Проблема
MFC определяет множество стандартных идентификаторов команд в файле заголовка AFXRES.H. Поддержка платформы для этих команд зависит. Понимание того, где и как классы платформы обрабатывают эти команды, не только покажут, как платформа работает внутренне, но и предоставит полезные сведения о настройке стандартных реализаций и обучении вам нескольких методов реализации собственных обработчиков команд.
Содержимое этой технической заметки
Каждый идентификатор команды описан в двух разделах:
Заголовок: символическое имя идентификатора команды (например, ID_FILE_SAVE), за которым следует назначение команды (например, "сохраняет текущий документ"), разделенную двоеточием.
Один или несколько абзацев, описывающих, какие классы реализуют команду, и что делает реализация по умолчанию
Большинство реализаций команд по умолчанию предварительно включены в карту сообщений базового класса платформы. Существуют некоторые реализации команд, требующие явной проводки в производном классе. Они описаны в разделе "Примечание". Если вы выбрали правильные параметры в AppWizard, эти обработчики по умолчанию будут подключены для вас в созданном скелетном приложении.
Соглашение об именовании
Стандартные команды соответствуют простому соглашению об именовании, которое рекомендуется использовать по возможности. Большинство стандартных команд расположены в стандартных местах в строке меню приложения. Символическое имя команды начинается с "ID_", за которым следует стандартное имя всплывающего меню, а затем имя элемента меню. Символьное имя находится в верхнем регистре с подчеркиванием слов-разрывов. Для команд, не имеющих стандартных имен элементов меню, логическая команда определяется начиная с "ID_" (например, ID_NEXT_PANE).
Мы используем префикс "ID_", чтобы указать команды, которые предназначены для привязки к элементам меню, кнопкам панели инструментов или другим объектам пользовательского интерфейса команды. Обработчики команд, обрабатывающие команды "ID_", должны использовать механизмы ON_COMMAND и ON_UPDATE_COMMAND_UI архитектуры команд MFC.
Мы рекомендуем использовать стандартный префикс "IDM_" для элементов меню, которые не соответствуют архитектуре команд и нуждаются в коде для включения и отключения. Конечно, количество определенных команд меню должно быть небольшим, так как после архитектуры команд MFC не только делает обработчики команд более мощными (так как они будут работать с панелями инструментов), но и делает код обработчика команд повторно используемым.
Диапазоны идентификаторов
Дополнительные сведения об использовании диапазонов идентификаторов в MFC см . в техническом примечание 20 .
Стандартные команды MFC попадают в диапазон 0xE000 до 0xEFFF. Не следует полагаться на определенные значения этих идентификаторов, так как они подвергаются изменению в будущих версиях библиотеки.
Приложение должно определить свои команды в диапазоне 0x8000 для 0xDFFF.
Идентификаторы стандартных команд
Для каждого идентификатора команды существует стандартная строка строки сообщений, которую можно найти в файле PROMPTS. RC. Идентификатор строки для этой строки меню должен совпадать с идентификатором команды.
ID_FILE_NEW Создает новый или пустой документ.
Примечание.
Чтобы включить эту функцию, необходимо подключить это к
CWinApp
карте сообщений производного класса.CWinApp::OnFileNew
реализует эту команду по-разному в зависимости от количества шаблонов документов в приложении. Если существует только одинCDocTemplate
CWinApp::OnFileNew
, создадит новый документ этого типа, а также соответствующий класс фрейма и представления.Если существует несколько
CDocTemplate
,CWinApp::OnFileNew
пользователь предложит пользователю использовать диалоговое окно (AFX_IDD_NEWTYPEDLG), чтобы выбрать тип документа. Выбранный элементCDocTemplate
используется для создания документа.Одной из распространенных настроек ID_FILE_NEW является предоставление другого и более графического выбора типов документов. В этом случае вы можете реализовать собственный
CMyApp::OnFileNew
и поместить его в карту сообщений вместоCWinApp::OnFileNew
. Нет необходимости вызывать реализацию базового класса.Другая распространенная настройка ID_FILE_NEW заключается в предоставлении отдельной команды для создания документа каждого типа. В этом случае необходимо определить новые идентификаторы команд, например ID_FILE_NEW_CHART и ID_FILE_NEW_SHEET.
ID_FILE_OPEN Открывает существующий документ.
Примечание.
Чтобы включить эту функцию, необходимо подключить это к
CWinApp
карте сообщений производного класса.CWinApp::OnFileOpen
имеет очень простую реализацию вызововCWinApp::DoPromptFileName
, за которым следуетCWinApp::OpenDocumentFile
использовать файл или имя пути для открытия файла. ПодпрограммаCWinApp
DoPromptFileName
реализации открывает стандартное диалоговое окно FileOpen и заполняет его расширениями файлов, полученными из текущих шаблонов документов.Одна из распространенных настроек ID_FILE_OPEN заключается в настройке диалогового окна FileOpen или добавлении дополнительных фильтров файлов. Рекомендуется настроить эту настройку, чтобы заменить реализацию по умолчанию собственным диалогом FileOpen и вызвать
CWinApp::OpenDocumentFile
его именем файла или пути документа. Нет необходимости вызывать базовый класс.ID_FILE_CLOSE закрывает открытый документ.
CDocument::OnFileClose
вызываетCDocument::SaveModified
запрос пользователя сохранить документ, если он был изменен, а затем вызываетсяOnCloseDocument
. В подпрограмме выполняетсяOnCloseDocument
все закрывающая логика, включая уничтожение документа.Примечание.
ID_FILE_CLOSE действует по-другому от сообщения WM_CLOSE или системной команды SC_CLOSE, отправляемой в окно фрейма документов. Закрытие окна закроет документ только в том случае, если это последнее окно фрейма, показывающее документ. Закрытие документа с помощью ID_FILE_CLOSE не только закроет документ, но и закроет все окна кадров, показывающие документ.
ID_FILE_SAVE сохраняет текущий документ.
Реализация использует вспомогательный подпрограмму
CDocument::DoSave
, которая используется для обоихOnFileSave
иOnFileSaveAs
. Если вы сохраните документ, который еще не был сохранен (т. е. не имеет имени пути, как в случае FileNew) или который был прочитан из документа только для чтения,OnFileSave
логика будет действовать как команда ID_FILE_SAVE_AS и попросить пользователя предоставить новое имя файла. Фактический процесс открытия файла и сохранения выполняется с помощью виртуальной функцииOnSaveDocument
.Существует две распространенные причины настройки ID_FILE_SAVE. Для документов, которые не сохраняются, просто удалите элементы меню ID_FILE_SAVE и кнопки панели инструментов из пользовательского интерфейса. Кроме того, убедитесь, что вы никогда не грязное документ (т. е. никогда не вызываете
CDocument::SetModifiedFlag
), и платформа никогда не будет вызывать сохранение документа. Для документов, которые сохраняются в другом месте, кроме файла диска, определите новую команду для этой операции.В случае
COleServerDoc
ID_FILE_SAVE используется как для сохранения файлов (для обычных документов), так и для обновления файлов (для внедренных документов).Если данные документа хранятся в отдельных файлах дисков, но вы не хотите использовать реализацию сериализации по умолчанию
CDocument
, вместо нееOnFileSave
следует переопределитьCDocument::OnSaveDocument
.ID_FILE_SAVE_AS сохраняет текущий документ под другим именем файла.
Реализация
CDocument::OnFileSaveAs
использует ту же вспомогательнуюCDocument::DoSave
подпрограмму, чтоOnFileSave
и . КомандаOnFileSaveAs
обрабатывается так же, как и ID_FILE_SAVE, если у документов нет имени файла перед сохранением.COleServerDoc::OnFileSaveAs
реализует логику для сохранения обычного файла данных документа или сохранения серверного документа, представляющего объект OLE, внедренный в другое приложение в виде отдельного файла.Если вы настраиваете логику ID_FILE_SAVE, возможно, потребуется настроить ID_FILE_SAVE_AS аналогичным образом или операцию "Сохранить как" может не применяться к документу. Вы можете удалить элемент меню из строки меню, если он не нужен.
ID_FILE_SAVE_COPY_AS сохраняет текущий документ в новом имени.
Реализация
COleServerDoc::OnFileSaveCopyAs
очень похожаCDocument::OnFileSaveAs
, за исключением того, что объект документа не подключен к базовому файлу после сохранения. То есть, если документ в памяти был изменен перед сохранением, он по-прежнему "изменен". Кроме того, эта команда не влияет на имя пути или заголовок, хранящиеся в документе.ID_FILE_UPDATE уведомляет контейнер о сохранении внедренного документа.
Реализация
COleServerDoc::OnUpdateDocument
просто не изменяет контейнер, который следует сохранить. Затем контейнер вызывает соответствующие API OLE для сохранения внедренного объекта.ID_FILE_PAGE_SETUP Вызывает диалоговое окно настройки и макета страницы для конкретного приложения.
В настоящее время для этого диалога нет стандарта, и платформа не имеет реализации этой команды по умолчанию.
Если вы решили реализовать эту команду, рекомендуется использовать этот идентификатор команды.
ID_FILE_PRINT_SETUP Вызов стандартного диалогового окна установки печати.
Примечание.
Чтобы включить эту функцию, необходимо подключить это к
CWinApp
карте сообщений производного класса.Эта команда вызывает стандартное диалоговое окно настройки печати, позволяющее пользователю настраивать параметры принтера и печати по крайней мере для этого документа или по крайней мере всех документов в этом приложении. Чтобы изменить параметры принтера по умолчанию для всей системы, необходимо использовать панель управления.
CWinApp::OnFilePrintSetup
имеет очень простуюCPrintDialog
реализацию, создавая объект и вызывая функциюCWinApp::DoPrintDialog
реализации. Это задает настройку принтера по умолчанию для приложения.Общая необходимость настройки этой команды заключается в том, чтобы разрешить параметры принтера для каждого документа, которые должны храниться вместе с документом при сохранении. Для этого необходимо добавить обработчик карты сообщений в
CDocument
класс, который создаетCPrintDialog
объект, инициализирует его соответствующими атрибутами принтера (обычно hDevMode и hDevNames), вызыватьCPrintDialog::DoModal
и сохранять измененные параметры принтера. Для надежной реализации следует ознакомиться с реализациейCWinApp::DoPrintDialog
обнаружения ошибок иCWinApp::UpdatePrinterSelection
для работы с разумными значениями по умолчанию и отслеживанием изменений принтера на всей системе.ID_FILE_PRINT стандартной печати текущего документа
Примечание.
Чтобы включить эту функцию, необходимо подключить это к
CView
карте сообщений производного класса.Эта команда печатает текущий документ или более правильно запускает процесс печати, который включает вызов стандартного диалогового окна печати и запуск обработчика печати.
CView::OnFilePrint
реализует эту команду и основной цикл печати. Он вызывает виртуальную строкуCView::OnPreparePrinting
для запроса пользователя с диалоговым окном печати. Затем он подготавливает выходной контроллер домена для перехода на принтер, открывает диалоговое окно выполнения печати (AFX_IDD_PRINTDLG) и отправляетStartDoc
экран на принтер.CView::OnFilePrint
также содержит цикл печати, ориентированный на главную страницу. Для каждой страницы он вызывает виртуальнуюCView::OnPrepareDC
StartPage
, за которой следует escape-экран и вызывает виртуальнуюCView::OnPrint
для этой страницы. По завершении вызывается виртуальная машинаCView::OnEndPrinting
, а диалоговое окно выполнения печати закрывается.Архитектура печати MFC предназначена для перехвата различных способов печати и предварительного просмотра. Обычно вы найдете различные
CView
переопределиемые функции, подходящие для любых задач печати, ориентированных на страницы. Только в случае приложения, использующего принтер для нестраничных выходных данных, следует найти необходимость заменить реализацию ID_FILE_PRINT.ID_FILE_PRINT_PREVIEW ввести режим предварительного просмотра для текущего документа.
Примечание.
Чтобы включить эту функцию, необходимо подключить это к
CView
карте сообщений производного класса.CView::OnFilePrintPreview
запускает режим предварительного просмотра печати, вызвав документированную вспомогательный функциюCView::DoPrintPreview
.CView::DoPrintPreview
— это основной механизм цикла предварительного просмотра печати, какOnFilePrint
и основной механизм для цикла печати.Операция предварительного просмотра печати может быть настроена различными способами путем передачи различных параметров
DoPrintPreview
в . Обратитесь к Техническому примечание 30, в котором рассматриваются некоторые сведения о предварительном просмотре печати и его настройке.ID_FILE_MRU_FILE1... FILE16 A range command IDs for the File MRU list.
CWinApp::OnUpdateRecentFileMenu
— это обработчик пользовательского интерфейса команды обновления, который является одним из более сложных способов использования механизма ON_UPDATE_COMMAND_UI. В ресурсе меню необходимо определить только один пункт меню с идентификатором ID_FILE_MRU_FILE1. Этот пункт меню остается изначально отключенным.По мере роста списка MRU в список добавляются дополнительные элементы меню.
CWinApp
Стандартная реализация по умолчанию применяется к стандартному ограничению четырех последних использованных файлов. Вы можете изменить значение по умолчанию, вызвавCWinApp::LoadStdProfileSettings
более крупное или меньшее значение. Список MRU хранится в приложении. INI-файл. Список загружается в функцию приложенияInitInstance
при вызовеLoadStdProfileSettings
и сохраняется при выходе приложения. Обработчик пользовательского интерфейса обновления MRU также преобразует абсолютные пути в относительные пути для отображения в меню файла.CWinApp::OnOpenRecentFile
— это обработчик ON_COMMAND, выполняющий фактическую команду. Он просто получает имя файла из списка MRU и вызововCWinApp::OpenDocumentFile
, что делает всю работу при открытии файла и обновлении списка MRU.Настройка этого обработчика команд не рекомендуется.
ID_EDIT_CLEAR Очищает текущий выбор
В настоящее время для этой команды отсутствует стандартная реализация. Это необходимо реализовать для каждого
CView
производного класса.CEditView
предоставляет реализацию этой команды с помощьюCEdit::Clear
. Если текущего выбора нет, команда отключена.Если вы решили реализовать эту команду, рекомендуется использовать этот идентификатор команды.
ID_EDIT_CLEAR_ALL очищает весь документ.
В настоящее время для этой команды отсутствует стандартная реализация. Это необходимо реализовать для каждого
CView
производного класса.Если вы решили реализовать эту команду, рекомендуется использовать этот идентификатор команды. Пример SCRIBBLE см. в примере руководства по MFC.
ID_EDIT_COPY копирует текущий выбор в буфер обмена.
В настоящее время для этой команды отсутствует стандартная реализация. Это необходимо реализовать для каждого
CView
производного класса.CEditView
предоставляет реализацию этой команды, которая копирует выделенный текст в буфер обмена как CF_TEXT с помощьюCEdit::Copy
. Если текущего выбора нет, команда отключена.Если вы решили реализовать эту команду, рекомендуется использовать этот идентификатор команды.
ID_EDIT_CUT Вырезает текущий выделенный фрагмент в буфер обмена.
В настоящее время для этой команды отсутствует стандартная реализация. Это необходимо реализовать для каждого
CView
производного класса.CEditView
предоставляет реализацию этой команды, которая вырезает выделенный текст в буфер обмена как CF_TEXT с помощьюCEdit::Cut
. Если текущего выбора нет, команда отключена.Если вы решили реализовать эту команду, рекомендуется использовать этот идентификатор команды.
ID_EDIT_FIND Начинает операцию поиска, открывает диалоговое окно без режима поиска.
В настоящее время для этой команды отсутствует стандартная реализация. Это необходимо реализовать для каждого
CView
производного класса.CEditView
предоставляет реализацию этой команды, которая вызывает вспомогательные функцииOnEditFindReplace
реализации для использования и хранения предыдущих параметров поиска и замены в переменных частной реализации. КлассCFindReplaceDialog
используется для управления диалоговым окном без режима для запроса пользователя.Если вы решили реализовать эту команду, рекомендуется использовать этот идентификатор команды.
ID_EDIT_PASTE Вставляет текущее содержимое буфера обмена.
В настоящее время для этой команды отсутствует стандартная реализация. Это необходимо реализовать для каждого
CView
производного класса.CEditView
предоставляет реализацию этой команды, которая копирует текущие данные буфера обмена, заменяя выбранный текст с помощьюCEdit::Paste
. Команда отключена, если в буфере обмена нет CF_TEXT .COleClientDoc
просто предоставляет обработчик пользовательского интерфейса команды обновления для этой команды. Если буфер обмена не содержит внедренный элемент или объект OLE, команда будет отключена. Вы несете ответственность за написание обработчика для фактической команды для выполнения фактической вставки. Если приложение OLE также может вставить другие форматы, необходимо указать собственный обработчик пользовательского интерфейса команды обновления в представлении или документе (то есть где-то раньшеCOleClientDoc
в целевой маршрутизации команды).Если вы решили реализовать эту команду, рекомендуется использовать этот идентификатор команды.
Для замены стандартной реализации OLE используйте
COleClientItem::CanPaste
.ID_EDIT_PASTE_LINK Вставляет ссылку из текущего содержимого буфера обмена.
В настоящее время для этой команды отсутствует стандартная реализация. Это необходимо реализовать для каждого
CView
производного класса.COleDocument
просто предоставляет обработчик пользовательского интерфейса команды обновления для этой команды. Если буфер обмена не содержит связываемый элемент или объект OLE, команда будет отключена. Вы несете ответственность за написание обработчика для фактической команды для выполнения фактической вставки. Если приложение OLE также может вставить другие форматы, необходимо указать собственный обработчик пользовательского интерфейса команды обновления в представлении или документе (то есть где-то раньшеCOleDocument
в целевой маршрутизации команды).Если вы решили реализовать эту команду, рекомендуется использовать этот идентификатор команды.
Для замены стандартной реализации OLE используйте
COleClientItem::CanPasteLink
.ID_EDIT_PASTE_SPECIAL Вставляет текущее содержимое буфера обмена с параметрами.
В настоящее время для этой команды отсутствует стандартная реализация. Это необходимо реализовать для каждого
CView
производного класса. MFC не предоставляет это диалоговое окно.Если вы решили реализовать эту команду, рекомендуется использовать этот идентификатор команды.
ID_EDIT_REPEAT повторяет последнюю операцию.
В настоящее время для этой команды отсутствует стандартная реализация. Это необходимо реализовать для каждого
CView
производного класса.CEditView
предоставляет реализацию этой команды для повторения последней операции поиска. Используются переменные частной реализации для последнего поиска. Команда отключена, если не удается выполнить поиск.Если вы решили реализовать эту команду, рекомендуется использовать этот идентификатор команды.
ID_EDIT_REPLACE Начинает операцию замены, открывает диалоговое окно без режима замены.
В настоящее время для этой команды отсутствует стандартная реализация. Это необходимо реализовать для каждого
CView
производного класса.CEditView
предоставляет реализацию этой команды, которая вызывает вспомогательные функцииOnEditFindReplace
реализации для использования и хранения предыдущих параметров поиска и замены в переменных частной реализации. КлассCFindReplaceDialog
используется для управления бессерверным диалогом, который запрашивает пользователя.Если вы решили реализовать эту команду, рекомендуется использовать этот идентификатор команды.
ID_EDIT_SELECT_ALL Выбирает весь документ.
В настоящее время для этой команды отсутствует стандартная реализация. Это необходимо реализовать для каждого
CView
производного класса.CEditView
предоставляет реализацию этой команды, которая выбирает весь текст в документе. Команда отключена, если нет текста для выбора.Если вы решили реализовать эту команду, рекомендуется использовать этот идентификатор команды.
ID_EDIT_UNDO отменяет последнюю операцию.
В настоящее время для этой команды отсутствует стандартная реализация. Это необходимо реализовать для каждого
CView
производного класса.CEditView
предоставляет реализацию этой команды с помощьюCEdit::Undo
. Команда отключена, еслиCEdit::CanUndo
возвращает значение FALSE.Если вы решили реализовать эту команду, рекомендуется использовать этот идентификатор команды.
ID_EDIT_REDO переопределяет последнюю операцию.
В настоящее время для этой команды отсутствует стандартная реализация. Это необходимо реализовать для каждого
CView
производного класса.Если вы решили реализовать эту команду, рекомендуется использовать этот идентификатор команды.
ID_WINDOW_NEW Открывает другое окно активного документа.
CMDIFrameWnd::OnWindowNew
реализует эту мощную функцию с помощью шаблона документа текущего документа для создания другого кадра, содержащего другое представление текущего документа.Как и большинство команд меню меню "Окно" для нескольких интерфейсов документов (MDI), команда отключена, если нет активного дочернего окна MDI.
Настройка этого обработчика команд не рекомендуется. Если вы хотите предоставить команду, которая создает дополнительные представления или окна кадров, вы, вероятно, будете лучше придумать собственную команду. Вы можете клонировать код из
CMDIFrameWnd::OnWindowNew
и изменить его в определенный кадр и просмотреть классы вашего вкуса.ID_WINDOW_ARRANGE Упорядочивает значки в нижней части окна MDI.
CMDIFrameWnd
реализует эту стандартную команду MDI в вспомогательной функцииOnMDIWindowCmd
реализации. Этот вспомогательный помощник сопоставляет идентификаторы команд с сообщениями MDI Windows и поэтому может совместно использовать большой объем кода.Как и большинство команд меню окна MDI, команда отключена, если активного дочернего окна MDI нет.
Настройка этого обработчика команд не рекомендуется.
ID_WINDOW_CASCADE каскадных окон, чтобы они перекрывались.
CMDIFrameWnd
реализует эту стандартную команду MDI в вспомогательной функцииOnMDIWindowCmd
реализации. Этот вспомогательный помощник сопоставляет идентификаторы команд с сообщениями MDI Windows и поэтому может совместно использовать большой объем кода.Как и большинство команд меню окна MDI, команда отключена, если активного дочернего окна MDI нет.
Настройка этого обработчика команд не рекомендуется.
ID_WINDOW_TILE_HORZ окна плитки горизонтально.
Эта команда реализуется
CMDIFrameWnd
так же, как и ID_WINDOW_CASCADE, за исключением другого сообщения Windows MDI для операции.Вы должны выбрать ориентацию плитки по умолчанию для приложения. Это можно сделать, изменив идентификатор элемента меню "Плитка" окна на ID_WINDOW_TILE_HORZ или ID_WINDOW_TILE_VERT.
ID_WINDOW_TILE_VERT окна плитки по вертикали.
Эта команда реализуется
CMDIFrameWnd
так же, как и ID_WINDOW_CASCADE, за исключением другого сообщения Windows MDI для операции.Вы должны выбрать ориентацию плитки по умолчанию для приложения. Это можно сделать, изменив идентификатор элемента меню "Плитка" окна на ID_WINDOW_TILE_HORZ или ID_WINDOW_TILE_VERT.
ID_WINDOW_SPLIT интерфейс клавиатуры для разделения.
CView
обрабатывает эту команду дляCSplitterWnd
реализации. Если представление является частью окна разделения, эта команда делегируется функцииCSplitterWnd::DoKeyboardSplit
реализации. При этом разделитель помещается в режим, который позволит пользователям клавиатуры разделить или отменить разбиение окна разделения.Эта команда отключена, если представление не входит в разделитель.
Настройка этого обработчика команд не рекомендуется.
ID_APP_ABOUT вызывает диалоговое окно "Сведения".
Нет стандартной реализации для поля "Сведения о приложении". Созданное по умолчанию приложение AppWizard создаст настраиваемый класс диалогов для приложения и будет использовать его в качестве поля "О программе". AppWizard также будет записывать тривиальный обработчик команд, который обрабатывает эту команду и вызывает диалоговое окно.
Вы почти всегда реализуете эту команду.
ID_APP_EXIT выйти из приложения.
CWinApp::OnAppExit
обрабатывает эту команду, отправив WM_CLOSE сообщение в главное окно приложения. Стандартное завершение работы приложения (запрос грязное файлов и т. д.) обрабатывается реализациейCFrameWnd
.Настройка этого обработчика команд не рекомендуется. Рекомендуется переопределить
CWinApp::SaveAllModified
или закрыть логикуCFrameWnd
.Если вы решили реализовать эту команду, рекомендуется использовать этот идентификатор команды.
ID_HELP_INDEX списки разделов справки из . HLP-файл.
Примечание.
Чтобы включить эту функцию, необходимо подключить это к
CWinApp
карте сообщений производного класса.CWinApp::OnHelpIndex
обрабатывает эту команду, тривиально вызываяCWinApp::WinHelp
.Настройка этого обработчика команд не рекомендуется.
ID_HELP_USING отображает справку по использованию справки.
Примечание.
Чтобы включить эту функцию, необходимо подключить это к
CWinApp
карте сообщений производного класса.CWinApp::OnHelpUsing
обрабатывает эту команду, тривиально вызываяCWinApp::WinHelp
.Настройка этого обработчика команд не рекомендуется.
ID_CONTEXT_HELP режим справки SHIFT-F1.
Примечание.
Чтобы включить эту функцию, необходимо подключить это к
CWinApp
карте сообщений производного класса.CWinApp::OnContextHelp
обрабатывает эту команду, задав курсор в режиме справки, введя модальный цикл и ожидая, когда пользователь выберет окно, чтобы получить справку. Дополнительные сведения о реализации справки MFC см . в техническом примечание 28 .Настройка этого обработчика команд не рекомендуется.
ID_HELP Предоставляет справку по текущему контексту
Примечание.
Чтобы включить эту функцию, необходимо подключить это к
CWinApp
карте сообщений производного класса.CWinApp::OnHelp
обрабатывает эту команду, получая правильный контекст справки для текущего контекста приложения. Это обрабатывает простую справку F1, справку по полям сообщений и т. д. Дополнительные сведения о реализации справки MFC см . в техническом примечание 28 .Настройка этого обработчика команд не рекомендуется.
ID_DEFAULT_HELP Отображает справку по умолчанию для контекста
Примечание.
Чтобы включить эту функцию, необходимо подключить это к
CWinApp
карте сообщений производного класса.Эта команда обычно сопоставляется с
CWinApp::OnHelpIndex
.Другой обработчик команд можно указать, если необходимо различие между справкой по умолчанию и индексом справки.
ID_NEXT_PANE Переход к следующей области
CView
обрабатывает эту команду дляCSplitterWnd
реализации. Если представление является частью окна разделения, эта команда делегируется функцииCSplitterWnd::OnNextPaneCmd
реализации. Это приведет к перемещению активного представления на следующую область в разделитете.Эта команда отключена, если представление не находится в разделителье или нет следующей области для перехода.
Настройка этого обработчика команд не рекомендуется.
ID_PREV_PANE Переход на предыдущую панель
CView
обрабатывает эту команду дляCSplitterWnd
реализации. Если представление является частью окна разделения, эта команда делегируется функцииCSplitterWnd::OnNextPaneCmd
реализации. Это приведет к перемещению активного представления на предыдущую панель в разделитете.Эта команда отключена, если представление не находится в разделителье или нет предыдущей панели для перехода.
Настройка этого обработчика команд не рекомендуется.
ID_OLE_INSERT_NEW Вставка нового объекта OLE
В настоящее время для этой команды отсутствует стандартная реализация. Это необходимо реализовать для производного класса,
CView
чтобы вставить новый элемент ИЛИ объект OLE в текущий выбор.Все клиентские приложения OLE должны реализовать эту команду. AppWizard с параметром OLE создаст скелетную реализацию
OnInsertObject
в классе представления, который вам придется завершить.Полный пример OCLIENT для OCLIENT для MFC см. в примере OCLIENT для полной реализации этой команды.
ID_OLE_EDIT_LINKS изменение ссылок OLE
COleDocument
обрабатывает эту команду с помощью предоставленной MFC реализации диалогового окна стандартных ссылок OLE. Реализация этого диалогового окна осуществляется черезCOleLinksDialog
класс. Если текущий документ не содержит ссылок, команда отключена.Настройка этого обработчика команд не рекомендуется.
ID_OLE_VERB_FIRST... Диапазон идентификаторов для команд OLE
COleDocument
использует этот диапазон идентификаторов команд для команд, поддерживаемых выбранным в данный момент элементом или объектом OLE. Это должен быть диапазон, так как заданный тип элемента или объекта OLE может поддерживать ноль или больше пользовательских команд. В меню приложения должен быть один пункт меню с идентификатором ID_OLE_VERB_FIRST. При запуске программы меню будет обновлено с соответствующим описанием команды меню (или всплывающее меню с множеством глаголов). Управление меню OLE обрабатывается с помощьюAfxOleSetEditMenu
обработчика пользовательского интерфейса команды обновления для этой команды.Для обработки каждого идентификатора команды в этом диапазоне нет явных обработчиков команд.
COleDocument::OnCmdMsg
переопределяется, чтобы захватить все идентификаторы команд в этом диапазоне, превратить их в нумеру глаголов и запустить сервер для этой команды (с помощьюCOleClientItem::DoVerb
).Настройка или другое использование этого диапазона идентификаторов команд не рекомендуется.
ID_VIEW_TOOLBAR Переключение панели инструментов и выключение
CFrameWnd
обрабатывает эту команду и обработчик пользовательского интерфейса update-command, чтобы переключить видимое состояние панели инструментов. Панель инструментов должна быть дочерним окном кадра с идентификатором дочернего окна AFX_IDW_TOOLBAR. Обработчик команд фактически переключает видимость окна панели инструментов.CFrameWnd::RecalcLayout
используется для перерисовки окна фрейма с помощью панели инструментов в новом состоянии. Обработчик пользовательского интерфейса update-command проверка элемент меню при отображении панели инструментов.Настройка этого обработчика команд не рекомендуется. Если вы хотите добавить дополнительные панели инструментов, необходимо клонировать и изменить обработчик команд и обработчик пользовательского интерфейса update-command для этой команды.
ID_VIEW_STATUS_BAR Переключение строки состояния и выключение
Эта команда реализуется
CFrameWnd
так же, как и ID_VIEW_TOOLBAR, за исключением другого дочернего идентификатора окна (AFX_IDW_STATUS_BAR).
Обработчики команд только для обновления
Несколько стандартных идентификаторов команд используются в качестве индикаторов в строках состояния. Они используют тот же механизм обработки пользовательского интерфейса команды обновления для отображения текущего визуального состояния во время простоя приложения. Так как они не могут быть выбраны пользователем (т. е. невозможно отправить панель состояния), то нет смысла использовать обработчик ON_COMMAND для этих идентификаторов команд.
ID_INDICATOR_CAPS: индикатор блокировки CAP.
ID_INDICATOR_NUM : индикатор блокировки NUM.
ID_INDICATOR_SCRL : индикатор блокировки SCRL.
ID_INDICATOR_KANA: индикатор блокировки KANA (применимо только к японским системам).
Все три из них реализованы в CFrameWnd::OnUpdateKeyIndicator
вспомогательной функции реализации, которая использует идентификатор команды для сопоставления с соответствующим виртуальным ключом. Общая реализация включает или отключает (для областей состояния отключены = нет текста) CCmdUI
объект в зависимости от того, заблокирован ли соответствующий виртуальный ключ.
Настройка этого обработчика команд не рекомендуется.
ID_INDICATOR_EXT: индикатор выбора EXTended.
ID_INDICATOR_OVR : индикатор OVeRstrike.
ID_INDICATOR_REC: индикатор RECording.
В настоящее время для этих показателей отсутствует стандартная реализация.
Если вы решили реализовать эти индикаторы, рекомендуется использовать эти идентификаторы индикаторов и поддерживать порядок индикаторов в строке состояния (то есть в этом порядке: EXT, CAP, NUM, SCRL, OVR, REC).
См. также
Технические примечания по номеру
Технические примечания по категории