Cómo: Agregar enrutamientos de comandos al control de Windows Forms
CWinFormsView enruta los comandos y los mensajes de la interfaz de usuario de comandos de actualización al control de usuario para que pueda controlar los comandos de MFC (por ejemplo, elementos de menú de marcos y botones de barras de herramientas).
El control del usuario utiliza ICommandTarget::Initialize para almacenar una referencia al objeto de origen del comando en m_CmdSrc
, como se muestra en el ejemplo siguiente. Para usar ICommandTarget
, debe agregar una referencia a mfcmifc80.dll.
CWinFormsView
controla algunas de las notificaciones de vistas de MFC habituales reenviándolas al control del usuario administrado. Estas notificaciones incluyen los métodos OnInitialUpdate, OnUpdate y OnActivateView.
En este tema se supone que ha realizado los procedimientos que se indican en Cómo: Crear el control de usuario y hospedarlo en un cuadro de diálogo y Cómo: Crear el control de usuario y hospedarlo en una vista MDI.
Para crear la aplicación host MFC
Abra la biblioteca de controles de Windows Forms que creó en Cómo: Crear el control de usuario y hospedarlo en un cuadro de diálogo.
Agregue una referencia a mfcmifc80.dll. Para ello, haga clic con el botón derecho en el nodo del proyecto en el Explorador de soluciones, seleccione Agregar, Referencia y vaya a la carpeta Microsoft Visual Studio 10.0\VC\atlmfc\lib.
Abra UserControl1.Designer.cs y agregue la instrucción using siguiente:
using Microsoft.VisualC.MFC;
Además, en UserControl1.Designer.cs, cambie esta línea:
partial class UserControl1
a:
partial class UserControl1 : System.Windows.Forms.UserControl, ICommandTarget
Agregue ésta como primera línea de la definición de clase para
UserControl1
:private ICommandSource m_CmdSrc;
Agregue las definiciones de método siguientes a
UserControl1
(crearemos el identificador del control MFC en el paso siguiente):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."); }
Abra la aplicación de MFC que creó en Cómo: Crear el control de usuario y hospedarlo en una vista MDI.
Agregue una opción de menú que llamará a
singleMenuHandler
.Vaya a Vista de recursos (Ctrl+Mayús+E), expanda la carpeta Menú y haga doble clic en IDR_MFC02TYPE. Se muestra el editor de menús.
Agregue una opción de menú al final del menú Ver. Observe el identificador de la opción de menú en la ventana Propiedades. Guarde el archivo.
En el Explorador de soluciones, abra el archivo Resource.h, copie el valor del identificador para la opción de menú que acaba de agregar y pegue ese valor como primer parámetro de la llamada
m_CmdSrc.AddCommandHandler
en el métodoInitialize
del proyecto de C# (reemplazando32771
si es necesario).Crear y ejecutar el proyecto.
En el menú Compilar , haga clic en Compilar solución.
En el menú Depurar, haga clic en Iniciar sin depurar.
Seleccione la opción de menú que ha agregado. Observe que se llama al método en .dll.
Consulte también
Hospedar un control de usuario de Windows Forms como una vista de MFC
ICommandSource (interfaz)
ICommandTarget (interfaz)