Практическое руководство. Добавление маршрутизации команд в элемент управления Windows Forms
CWinFormsView направляет команды и сообщения пользовательского интерфейса обновления в пользовательский элемент управления, чтобы разрешить ему обрабатывать команды MFC (например, элементы меню кадра и кнопки панели инструментов).
В пользовательском элементе управления используется ICommandTarget::Initialize для хранения ссылки на исходный объект m_CmdSrc
команды, как показано в следующем примере. Чтобы использовать ICommandTarget
ссылку, необходимо добавить ссылку на mfcmifc80.dll.
CWinFormsView
обрабатывает несколько распространенных уведомлений представления MFC, перенаправляя их в управляемый пользовательский элемент управления. Эти уведомления включают методы OnInitialUpdate, OnUpdate и OnActivateView .
В этом разделе предполагается, что вы ранее выполнили инструкции. Создание пользовательского элемента управления и узла в диалоговом окне и практическое руководство. Создание пользовательского элемента управления и представления MDI узла.
Создание ведущего приложения MFC
Откройте библиотеку элементов управления Windows Forms, созданную в разделе "Практическое руководство. Создание пользовательского элемента управления и узла в диалоговом окне".
Добавьте ссылку на mfcmifc80.dll, которую можно сделать, щелкнув правой кнопкой мыши узел проекта в Обозреватель решений, выбрав "Добавить", "Ссылка", а затем перейдите в Microsoft Visual Studio 10.0\VC\atlmfc\lib.
Откройте UserControl1.Designer.cs и добавьте следующую инструкцию using:
using Microsoft.VisualC.MFC;
Кроме того, в UserControl1.Designer.cs измените эту строку:
partial class UserControl1
на такой:
partial class UserControl1 : System.Windows.Forms.UserControl, ICommandTarget
Добавьте это в качестве первой строки определения класса для
UserControl1
:private ICommandSource m_CmdSrc;
Добавьте следующие определения
UserControl1
методов (мы создадим идентификатор элемента управления MFC на следующем шаге):public void Initialize (ICommandSource cmdSrc) { m_CmdSrc = cmdSrc; // need ID of control in MFC dialog and callback function m_CmdSrc.AddCommandHandler(32771, new CommandHandler (singleMenuHandler)); } private void singleMenuHandler (uint cmdUI) { // User command handler code System.Windows.Forms.MessageBox.Show("Custom menu option was clicked."); }
Откройте приложение MFC, созданное в разделе "Практическое руководство. Создание пользовательского элемента управления и представления MDI узла".
Добавьте параметр меню, который будет вызываться
singleMenuHandler
.Перейдите в представление ресурсов (CTRL+SHIFT+E), разверните папку меню и дважды щелкните IDR_MFC02TYPE. Откроется редактор меню.
Добавьте параметр меню в нижней части меню "Вид ". Обратите внимание на идентификатор параметра меню в окне "Свойства ". Сохраните файл.
В Обозреватель решений откройте файл Resource.h, скопируйте значение идентификатора для только что добавленного параметра меню и вставьте это значение в качестве первого параметра
m_CmdSrc.AddCommandHandler
в вызов в методе проектаInitialize
C# (при необходимости заменяя32771
).Постройте и запустите проект.
В меню Сборка выберите Построить решение.
В меню отладки нажмите кнопку "Пуск" без отладки.
Выберите добавленный параметр меню. Обратите внимание, что вызывается метод в .dll.
См. также
Размещение пользовательского элемента управления формы Windows Forms в качестве представления MFC
Интерфейс ICommandSource
Интерфейс ICommandTarget