Использование сочетаний клавиш и главного меню диалогового окна в Visual C++

Переводы статьи Переводы статьи
Код статьи: 100770 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

Аннотация

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

Дополнительная информация

Типичное приложение, разработанное для Microsoft Операционная система Windows с помощью Visual C++ и программного обеспечения Microsoft Windows Пакета средств разработки (SDK) и что используется клавиатура вызовы ускорители TranslateAccelerator() функция в его основной цикл обработки сообщений. Однако при использовании модальное окно диалоговое окно как главное окно приложения не имеет основного сообщения цикл; Вместо этого приложение использует цикл сообщений диспетчера поле диалогового окна (построение в Windows) для преобразования и передачи сообщений. Само собой поскольку это цикл обработки сообщений не предназначена для обработки клавиши быстрого доступа, не вызывает TranslateAccelerator() функция.

Сочетания клавиш в модальное окно обработки диалоговое окно в MFC, необходимо переопределить CWinApp::ProcessMessageFilter() функция. Вызовы framework ProcessMessageFilter() Прежде чем он обрабатывает сообщение.

Чтобы изменить MFC Мастер диалоговое окно приложения на основе поля Тип приложения в Visual C++.NET правильно обрабатывать клавиши быстрого доступа, выполните следующие действия:
  1. В Visual Studio.NET, создайте новое приложение MFC. В Выберите на левой панели мастера приложений MFC, Тип приложения, а затем убедитесь, что Тип приложения имеет значение На базе диалогового окна.
  2. В представлении ресурсов дважды щелкните ресурс диалогового окна открыть диалоговое окно редактора ресурсов. Идентификатор ресурса ресурс диалогового окна похоже для IDD_МОЙ ПРОЕКТ_DIALOG (гдеМОЙ ПРОЕКТ имя, присвоенное приложением проект создается).
  3. С помощью ресурс диалогового окна, открытые в ресурсе диалогового окна редактор, найдите в окне свойств. Диалоговое окно '' Изменение Граница свойства и укажите Тонкий Стиль границы. Этот шаг необходим для диалогового окна содержит меню.
  4. Создайте новый ресурс, содержащий записи верхнего уровня с именем & файл и элемент меню с именем & Exit\tCTRL + E (CTRL + X обычно является связанные с вырезание текста, поэтому вместо него используется сочетание клавиш CTRL + E).
  5. В редакторе меню выберите только что созданный Выход элемент меню. Убедитесь, что в окне «Свойства» ИДЕНТИФИКАТОР для свойства Выход пункт меню имеет значение ID_FILE_EXIT.
  6. Связать новые меню диалогового окна путем ввода Идентификатор меню в ресурсе диалогового окна Меню свойство. Открытие редактора диалоговых окон для ресурс диалогового окна и поиск очередь Меню свойства в окне «Свойства». Задать идентификатор ресурса был создан для меню на шаге 4. Для этого нажмите кнопку раскрывающегося списка вМеню Свойство строки, а затем нажмите Выбрать идентификатор ресурса меню в списке.
  7. В редакторе меню щелкните правой кнопкой мыши & Exit\tCTRL + E, а затем нажмите кнопку Добавление обработчика событий.
  8. В мастере создания обработчика события, выберите КОМАНДА Тип сообщения. В Класс Список выбора CDialog для обработчика, должны быть созданы в основной класс, производный. Убедитесь, что соответствующее имя функции обработчика и нажмите кнопку Добавление и редактирование Чтобы создать обработчик событий для элемента меню.
  9. Вставьте следующую строку в функции Выход меню элемент метода обработчика событий, созданный на шаге 8:
    PostMessage(WM_COMMAND, IDOK, 0L);
    					
    Это дает тот же эффект, что и нажатие кнопки ОК Когда пользователь нажимает кнопку Выход В меню Файл меню. Нажав кнопку ОК Закрытие диалогового окно приложения.

  10. Создание нового ресурса сочетаний клавиш и связать сочетание клавиш CTRL + E сочетания клавиш с ID_FILE_EXIT. Сохраните изменения.
  11. Отредактируйте файл Stdafx.h объявить следующие глобальные переменные после # include инструкции:
    extern HWND    ghDlg;          // Handle to main dialog box.
    extern HACCEL  ghAccelTable;   // Handle to accelerator table.
    					
  12. В CPP-файл, содержащий CWinApp реализация производного класса (обычно в CPP-файл с тем же Базовое имя как имя проекта), добавьте следующие глобальной переменной Инициализация:
    HWND    ghDlg = 0;          // Handle to main dialog box.
    HACCEL  ghAccelTable = 0;   // Handle to accelerator table.
    					
  13. В главном CDialog производный класс (не в диалоговом окне класс, реализующий по умолчанию О диалоговое окно), поиск OnInitDialog() метод. При необходимости можно добавить для переопределения OnInitDialog() метод. Чтобы сделать это, выберите пункт CDialog производный класс в окне просмотра классов, а затем нажмите Переопределяет в окне «Свойства». Найти OnInitDialog строки и щелкните в правом столбце. Если OnInitDialog() не переопределены для этого класса, имеется возможность создать переопределение.
  14. Изменить функцию, добавленный ранее для включения Следующий код:
    ghDlg = m_hWnd;
    					
  15. В CPP-файл, содержащий CWinApp Производная реализация, поиск InitInstance() метод класса. Добавьте следующую строку сразу после вызова базовый класс CWinApp::InitInstance():
    ghAccelTable = LoadAccelerators(AfxGetInstanceHandle(),
    MAKEINTRESOURCE(IDR_ACCELERATOR1));
    					
    ПРИМЕЧАНИЕ: Идентификатор ресурса, используемый здесь (IDR_ACCELERATOR1) — идентификатор таблицы сочетаний клавиш-ресурса, добавленной на шаге 10.

  16. Добавить для переопределения CWinApp производные классы ProcessMessageFilter() метод класса. Для этого в окне просмотра классов выберите CWinApp производный класс в проект. Затем в окне «Свойства» Нажмите кнопку Переопределяет. Найти ProcessMessageFilter строки в окне «Свойства» и выберите в крайнем правом столбце эту строку. Щелкните стрелку раскрывающегося списка и выберите параметр для добавления для переопределения ProcessMessageFilter метод.
  17. Редактирование ProcessMessageFilter() метод переопределяют, чтобы он имел следующие реализации:
    BOOL CMyProjectApp::ProcessMessageFilter(int code, LPMSG lpMsg)
           {
              if (code < 0)
                 CWinApp::ProcessMessageFilter(code, lpMsg);
    
              if (ghDlg && ghAccelTable)
                 {
                 if (::TranslateAccelerator(ghDlg, ghAccelTable, lpMsg))
                    return(TRUE);
                 }
    
             return CWinApp::ProcessMessageFilter(code, lpMsg);
          }
    					
  18. Скомпилируйте и запустите приложение. Обратите внимание на то, что у него есть меню. При нажатии кнопки Выход В меню Файл меню или нажмите сочетание клавиш CTRL + E, закрывает приложение, как ожидается.

Свойства

Код статьи: 100770 - Последний отзыв: 1 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Foundation Class Library 4.2 на следующих платформах
    • Microsoft Visual C++ 2.1
    • Microsoft Visual C++ 4.0 Standard Edition
    • Microsoft Visual C# .NET 2002 Standard Edition
Ключевые слова: 
kbacceleratorkey kbhowto kbkeyaccel kbmenu kbui kbmt KB100770 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:100770

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com