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 реализует эту команду по-разному в зависимости от количества шаблонов документов в приложении. Если существует только одинCDocTemplateCWinApp::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 использовать файл или имя пути для открытия файла. Подпрограмма CWinAppDoPromptFileName реализации открывает стандартное диалоговое окно 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), и платформа никогда не будет вызывать сохранение документа. Для документов, которые сохраняются в другом месте, кроме файла диска, определите новую команду для этой операции.

    В случае COleServerDocID_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::OnPrepareDCStartPage , за которой следует 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).

См. также

Технические примечания по номеру
Технические примечания по категории