Contenedores de controles ActiveX: Usar controles en un contenedor sin cuadro de diálogo
En algunas aplicaciones, como una SDI o MDI, le interesará insertar un control en una ventana. La función miembro Create de la clase contenedora, insertada por Visual C++, puede crear una instancia del control dinámicamente, sin necesidad de un cuadro de diálogo.
La función miembro Create tiene estos parámetros:
lpszWindowName
Puntero al texto que se mostrará en la propiedad Text o Caption del control (si existe).
dwStyle
Estilos de ventanas. Encontrará una lista completa en CWnd::CreateControl.
rect
Especifica el tamaño y la posición del control.
pParentWnd
Especifica la ventana primaria del control (normalmente, CDialog
). No debe ser NULL.
Nid
Especifica el id. de control y está disponible para el contenedor a fin de hacer referencia al control.
Un ejemplo de uso de esta función para crear dinámicamente un control ActiveX sería una vista de formulario de una aplicación SDI. Después, podría crear una instancia del control en el controlador WM_CREATE
de la aplicación.
En este ejemplo, CMyView
es la clase de vista principal; CCirc
es la clase contenedora, y CIRC.H es el archivo de encabezado (.H) de la clase contenedora.
La implementación de esta característica es un proceso de cuatro pasos.
Cómo crear dinámicamente un control ActiveX en una ventana que no sea de cuadro de diálogo
Inserte CIRC.H en CMYVIEW.H justo antes de la definición de clase
CMyView
:#include "circ.h"
Agregue una variable miembro (de tipo
CCirc
) a la sección protegida de la definición de claseCMyView
ubicada en CMYVIEW.H:class CMyView : public CView {
protected: CCirc m_myCtl; public: afx_msg void OnViewCircdlg(); } ;
Agregue un controlador de mensajes
WM_CREATE
a la claseCMyView
.En la función del controlador,
CMyView::OnCreate
, llame a la funciónCreate
del control usando el punterothis
como la ventana primaria:int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; m_myCtl.Create(NULL, WS_VISIBLE, CRect(50, 50, 100, 100), this, 0); m_myCtl.SetCaption(_T("Control created")); return 0; }
Recompile el proyecto. Se creará dinámicamente un control Circ cada vez que se cree la vista de la aplicación.