Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo utilizar VC++ para diseñar controles ActiveX

Cómo utilizar VC++ para diseñar controles ActiveX

ActiveX es un conjunto de tecnologías propuestas por Microsoft que utilizan COM (Component Object Model) para permitir que los componentes de software interactúen en un entorno de red. No tiene nada que ver con lenguajes de programación específicos. Como tecnología desarrollada para aplicaciones de Internet, ActiveX se utiliza ampliamente en todos los aspectos de los servidores y clientes WEB. Este artículo se centra en el uso de Visual C++ 5.0 como herramienta y en el uso del AppWizard proporcionado por el sistema para construir rápidamente un control ActiveX simple.

Por lo general, VC++5.0 proporciona dos formas de desarrollar el control ActiveX: MFC y ATL (ActiveXTemplateLibrary). Al usar MFC, puede ignorar los detalles de la interfaz de control y concentrarse en la función del control en sí, pero el control generado es relativamente grande. Además, si el cliente desea ejecutar este control ActiveX, debe tener la DLL de la versión correspondiente de la biblioteca de clases MFC. De lo contrario, estas enormes bibliotecas de clases deben descargarse al mismo tiempo mediante ATL, porque no las admite; Teniendo en cuenta la biblioteca de clases estándar MFC, el control generado es relativamente más pequeño, pero los desarrolladores deben comprender los detalles de las tecnologías COM y OLE. Aquí, explicamos principalmente cómo usar MFC para desarrollar el control ActiveX, porque este método es relativamente fácil.

En el entorno de Microsoft Developer Studio, siga los siguientes pasos para generar rápidamente un control ActiveX estándar. Primero, inicie el Asistente de aplicaciones del sistema y use el elemento de menú Nuevo en el menú Archivo para crear un nuevo proyecto. Nota: Seleccionamos el elemento MFC ActiveX ControlWizard en el cuadro de lista. También puede usar el elemento ATL COM AppWizard para generar controles ActiveX. La cantidad de código final del control implementado de esta manera es menor. Sin embargo, dado que los objetos de control ActiveX agregados de esta manera comienzan desde los objetos COM más básicos, no puede usarlos. la biblioteca de clases MFC Las potentes funciones proporcionadas por COleControl. El uso del elemento MFC ActiveX ControlWizard genera una clase de objeto de control con COleControl como clase base, que hereda las características de todos los controles OLE implementados en la clase COleControl, incluidas las características y métodos, propiedades y eventos del objeto de ventana. Luego, siga las indicaciones del sistema para completar gradualmente el trabajo de creación. Los usuarios pueden personalizar varias funciones del control según los requisitos reales de la aplicación.

Asumimos que el proyecto se llama Test. Una vez completada la creación, abra el archivo del espacio de trabajo Test.dsw y podrá ver el marco de control de prueba generado por el sistema. Las clases principales y las descripciones de las funciones de implementación se muestran en la siguiente tabla:

Clase derivada. función de implementación de clase base

CTestApp COleControlModule inicialización y cancelación de instancia de control

CTestCtrl COleControl creación de ventana de control, actualización y procesamiento de mensajes

CTestPropPage COlePropertyPage configuración e intercambio de la página de propiedades de control con valores de propiedad reales

Compile este proyecto y genere Test.ocx. En el entorno actual de Developer Studio, este control se ha registrado automáticamente. Puede realizar la prueba inmediatamente utilizando la herramienta ActiveX Control Test Container proporcionada por el sistema. En la lista de controles OLE conectables proporcionada, Test Control es el nombre del control que generamos. Si desea usarlo en otros entornos, primero debe registrar el archivo Test.ocx. El método específico es escribir el comando: "regsvr32.../Test.ocx" en el modo de línea de comando. A partir de entonces podremos utilizarlo en cualquier entorno que admita controles ActiveX. Nota: los archivos .ocx siempre deben estar actualizados y registrados.

Por supuesto, el control generado de esta manera no tiene ningún uso sustancial. Si lo prueba en cualquier contenedor, solo será visible un cuadro rectangular y una elipse inscrita, excepto para realizar funciones de escala y movimiento de posición. cualquier operación.

Sin embargo, esperamos que el control desarrollado sea como un entorno de edición normal: los usuarios pueden ingresar y editar texto en la ventana, y habrá barras de herramientas para admitir varias operaciones.

1. Agregar barras de herramientas y subventanas a los controles

Las plantillas VC++ suelen ser herramientas muy útiles. Diseñamos una clase CToolbar para agregar una barra de herramientas a la clase de control T para mostrar cada botón. y pronta información. Nuestra clase de control CtestCtrl se deriva de esta clase, por lo que se puede agregar una barra de herramientas diseñada al control.

La siguiente es la definición de la clase de plantilla de barra de herramientas (en el archivo Toolbar.h):

plantilla

clase CToolbar

{

público:

CToolbar();

void CreateToolbar(HWND hParent);//Crear barra de herramientas

void AddButtons() ;//Agregar botones uno por uno

void DestroyToolbar();// Destruir barra de herramientas

LRESULT OnToolbarNeedText(WPARAM, LPNMHDR pnmh, BOOL&);

/ / Solicitar información para los botones de la barra de herramientas

protected:

HWND m_hwndToolbar; // Identificador de ventana de la barra de herramientas

}; >Continuar, realizar las modificaciones correspondientes a TestCtl.h y TestCtl.cpp. En TestCtl.h, primero debe incluir el archivo Toolbar.h y definir la clase de control como:

clase CTestCtrl: public COleControl, public CToolbar

Luego, agregue la macro de mapeo de mensajes :

BEGIN_TOOLBAR_MAP(CTestCtrl)

TOOLBAR_BUTTON(ID_New)

TOOLBAR_SEPARATOR()

TOOLBAR_BUTTON(ID_CUT)

......

TOOLBAR_SEPARATOR()

......

END_TOOLBAR_MAP()

Para responder a personalización Cada mensaje de botón en la barra de herramientas. La macro anterior está definida en el archivo Toolbar.h. Por lo tanto, varias operaciones de la clase CToolbar se pueden utilizar de manera flexible en las funciones miembro de la clase CTestCtrl.

Además, diseñamos una subventana editable para el control. Esto es muy conveniente de implementar. Simplemente agregue el objeto de la clase CEdit directamente como la variable miembro m_TestEdit en la definición de la clase de control.

Para generar nuestra propia ventana de control, necesitamos sobrecargar la función COleControl::CreateControlWindow. Cuando se crea la ventana de control, se llama a esta función. La función primero llama a la función de clase base con el mismo nombre y luego llama a CreateToolbar y CreateTestEdit en secuencia para generar la barra de herramientas y la subventana en el control. Naturalmente, ya no necesitamos la función de dibujo llamada por el sistema de forma predeterminada y eliminamos la parte de CTestCtrl::OnDraw que dibuja cuadros rectangulares y elipses.

CreateToolbar se implementa en la clase de plantilla de barra de herramientas; CreateTestEdit se personaliza en la clase de control. La función primero calcula el área del cliente de la ventana de control y el tamaño de la ventana de la barra de herramientas, obtiene la posición de la subventana y la crea. complete todas las áreas del control excepto la barra de herramientas y luego llame a la función m_TestEdit.Create para configurar los parámetros para que la subventana tenga los estilos deseados por el usuario.

2. Ajustar la posición de cada objeto en la ventana de control

Después de generar la barra de herramientas y la subventana en el control, otra tarea importante es determinar la posición del control. se mueve o el tamaño cambia, ajuste la posición y el tamaño de la barra de herramientas y la subventana en consecuencia

La clase COleControl nos proporciona esta función:

COleControl::OnSetObjectRects(LPCRECT). lpRectPos, LPCRECT lpRectClip);

Los parámetros dan la nueva posición del control. Sobrecargue esta función, primero ajuste automáticamente la barra de herramientas de acuerdo con las funciones proporcionadas por el sistema, llame a:

::SendMessage(m_hwndToolbar, TB_AUTOSIZE, 0L, 0L)

Luego, lo mismo como al crear Calcule el área del cliente de la ventana de control (se ha proporcionado el parámetro lpRectPos), llame a GetWindowRect para obtener el tamaño de la ventana de la barra de herramientas para que la subventana llene todas las áreas del control excepto la. barra de herramientas, primero debe calcular la posición rectangular correspondiente y llamar m_TestEdit.SetWindowPos Para ajustar la posición de la subventana. Por motivos de apariencia, también puedes dejar un pequeño margen en los cuatro lados de la subventana. Finalmente, llame a la función OnSetObjectRects de la clase base.

3. Controlar los objetos dentro del control

Debido a la subventana, de hecho, todas las operaciones funcionales del usuario están controladas por la subventana. Le damos control del foco a la ventana secundaria para que el usuario pueda realizar operaciones de entrada y edición, y llamar a m_TestEdit.SetFocus en CTestCtrl::OnSetFocus. De manera similar, cuando el objeto de control captura el mensaje de que se presiona el botón en la barra de herramientas, se llama a la función correspondiente de m_TestEdit para ejecutar el comando del usuario.

La visualización de información de solicitud en la barra de herramientas también está controlada por el objeto de control. Agregue el siguiente código a la función CTestCtrl::OnNotify:

NMHDR *pNMHDR = (NMHDR *)lParam;

BOOL tmp;

if (pNMHDR- > code == TTN_NEEDTEXT)

return OnToolbarNeedText(wParam, pNMHDR, tmp);

De esta manera, cuando el mouse se mueve y permanece sobre un botón de la barra de herramientas, el objeto de control Llamará a la función OnToolbarNeedText en la clase de plantilla de la barra de herramientas para obtener la información solicitada correspondiente.

4. Deshacer la ventana de control y los objetos internos

Lo último a tener en cuenta es que si creamos nuevas barras de herramientas y subventanas en el control, también debemos deshacer la ventana de control. en el tiempo y sus objetos internos. Para cancelar la ventana de control, llame a DestroyToolbar y m_TestEdit.DestroyWindow sucesivamente en la función CTestEdit::OnDestroy para borrar la barra de herramientas y la subventana.

Siguiendo los cuatro pasos anteriores, puedes crear un control ActiveX con una barra de herramientas y una subventana de edición. Los propios usuarios pueden definir subventanas para implementar varias funciones simples o complejas como aplicaciones normales. La existencia de la barra de herramientas facilita a los usuarios realizar diversas operaciones. Además, es posible agregar otros objetos necesarios al control y controlarlos.