Contenedores de controles ActiveX: Utilizar Controles en un contenedor de no Diálogo
En algunas aplicaciones, como una aplicación SDI o MDI, deseará insertar un control en una ventana de la aplicación.La función miembro de Create de la clase contenedora, inline en Visual C++, puede crear una instancia del control dinámicamente, sin necesidad de un cuadro de diálogo.
La función miembro de Create tiene los parámetros siguientes:
lpszWindowName
Un puntero al texto que se mostrará en el texto o la propiedad caption de control (si existe).dwStyle
Estilos de Windows.Para obtener una lista completa, vea CWnd::CreateControl.rect
Especifica el tamaño y la posición del control.pParentWnd
Especifica la ventana principal del control, normalmente CDialog.No debe ser NULL.nID
Especifica el identificador del control y se puede utilizar por el contenedor para hacer referencia al control.
Un ejemplo de cómo utilizar esta función para crear dinámicamente un control ActiveX estaría en una vista de formulario de una aplicación SDI.Puede crear una instancia del control en el controlador de WM_CREATE de la aplicación.
Para este ejemplo, CMyView es la clase principal de la vista, CCirc es la clase contenedora, y CIRC.H es el encabezado (. H) archivo de clase contenedora.
Implementar esta característica es un proceso de cuatro-paso.
Para crear dinámicamente un control ActiveX en una ventana de no-diálogo
Inserte CIRC.H en CMYVIEW.H, justo antes de la definición de clase de CMyView :
#include "circ.h"
Agregue una variable miembro (de CCircescribe) en la sección protected de la definición de clase de CMyView ubicada en CMYVIEW.H:
class CMyView : public CView { ... protected: CCirc m_myCtl; public: afx_msg void OnViewCircdlg(); };
Agregue un controlador de mensajes de WM_CREATE a la clase CMyView.
En la función de controlador, CMyView::OnCreate, realiza una llamada a la función de Create de control mediante un puntero de this como ventana principal:
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.Un control de Circ se creará dinámicamente cada vez que se crea la vista de la aplicación.