Paso 6: Añadir una página de propiedades

Páginas de propiedades se implementan como objetos COM independientes, que permiten a las páginas de propiedades ser compartida si es necesario. Para agregar una página de propiedades al control puede utilizar al Asistente para objetos ATL.

Inicie al Asistente para objetos ATL y seleccione controles como la categoría de la izquierda. Seleccione la Página de propiedades de la derecha y, a continuación, haga clic en siguiente.

Obtendrá una vez más el cuadro de diálogo permite introducir el nombre del nuevo objeto. Llamar el objeto PolyProp e introduzca ese nombre en el cuadro de edición Nombre corto.

Observe que el cuadro de edición de interfaz está atenuado. Esto es debido a una página de propiedades no necesita una interfaz personalizada.

Haga clic en la ficha de cadenas para definir el título de la página de propiedades. El título de la página de propiedad es la cadena que aparece en la ficha de esa página. Escriba amp;Polígono como el título. La Cadena es una descripción que un marco de propiedad se utiliza para poner en una punta de herramienta o línea de Estado. Tenga en cuenta que el marco de propiedad estándar actualmente no usa esta cadena, pero se puede establecer de todos modos. No vas a generar un Helpfile en este momento, así que borrar la entrada en ese cuadro de texto. Haga clic en &Aceptar y la propiedad se creará el objeto page.

Se crean los siguientes tres archivos:

Archivo Descripción
PolyProp.h Contiene la clase de C++ CPolyProp , que implementa la página de propiedades.
PolyProp.cpp Incluye el archivo PolyProp.h.
PolyProp.rgs La secuencia de comandos de registro que registra el objeto de la página de propiedad.

También se realizan los siguientes cambios de código:

Ahora agregue los campos que desee que aparezca en la página de propiedades. Observe que en Polygon.rc el cuadro de diálogo está vacía salvo por una etiqueta que dice que inserte los controles aquí. Eliminar esa etiqueta y agregar uno que contiene el texto "lados:". Junto a la etiqueta agregar un cuadro de edición y asignarle un ID deIDC_SIDES.

Incluir Polygon.h en la parte superior del archivo PolyProp.h:

# i&nclude "Polygon.h"nbsp; / / definición de IPolyCtl

Ahora que la CPolyProp clase para establecer el número de lados en su objeto cuando se presiona el botón aplicar . Cambiar el Apply funciona como sigue en PolyProp.h.

STDMETHOD(Apply)(void)
{
   USES_CONVERSION;
   ATLTRACE(_T("CPolyProp::Apply\n"));
   para (UINT I = 0; i lt; m_nObjects; i ++)
   {
      CComQIPtr < IPolyCtl & IID_IPolyCtl > pPoly(m_ppUnk[i]);
      corto nSides = (short)GetDlgItemInt(IDC_SIDES);
      Si no (pPoly - > put_Sides(nSides))
      {
         PError CComPtr <IErrorInfo>;
         CComBSTR strError;
         GetErrorInfo (0 & pError);
         pError - > GetDescription(&strError);
         MessageBox(OLE2T(strError), _T("Error"), MB_ICONEXCLAMATION);
         devolver E_FAIL;
      }
   }
   m_bDirty = FALSE;
   Devuelve S_OK;
}

Una página de propiedades podría tener más de un cliente conectado a él en un momento, por lo que el Apply función bucles alrededor y llama a put_Sides en cada cliente con el valor obtenido en el cuadro de edición. Está utilizando la clase CComQIPtr , que realiza la QueryInterface en cada objeto para obtener la IPolyCtl interfaz desde el IUnknown (almacenada en la m_ppUnk matriz).

El código comprueba ahora establecer la propiedad de lados efectivamente trabajada. Si se produce un error, el código muestra un cuadro de mensaje muestra detalles de error de la interfaz IErrorInfo . Normalmente, un contenedor pide un objeto de la interfaz de ISupportErrorInfo y llama InterfaceSupportsErrorInfo en primer lugar, para determinar si el objeto admite información de errores de configuración. Pero ya que es el control, puede renunciar a esa verificación.

CComPtr le ayuda a controlando automáticamente la referencia de contar, por lo que no necesita llamar a versión de la interfaz. CComBSTR le ayuda con BSTR procesamiento, por lo que no tendrás que realizar la llamada de SysFreeString final. También utiliza una de las distintas clases de conversión de cadena, por lo que puede convertir el BSTR si es necesario (eso agregamos la macro USES_CONVERSION al comienzo de la función).

También debe establecer la marca sucia de página de propiedades para indicar que debe ser activado el botón aplicar . Esto ocurre cuando el usuario cambia el valor en el cuadro de edición de lados. Haga clic en la clase de página de propiedades (CPolyProp) en ClassView y seleccione Agregar Windows Message Handler... desde el menu.nbsp de acceso directo; IDC_SIDES, seleccione el cuadro de objeto y, a continuación, agregue el mensaje E&N_CHANGE.

Ahora agregue el código siguiente en Polyprop.h a la OnChangeSides función (eliminar cualquier código que el Asistente para pone ahí):

 LRESULT OnCh&angeSides(WORD wNotify, WORD wID, HWND hWnd, BOOLamp; bHandled)
{
   SetDirty(TRUE);
   devuelven 0;
}

OnChangeSidesse llamará cuando se envía un mensaje WM_COMMAND con la notificación de EN_CHANGE para el IDC_SIDES control. OnChangeSides , a continuación, se llama SetDirty y pasa TRUE para indicar la página de propiedades ahora está sucia y debe estar habilitado el botón aplicar.

Ahora, agregue la página de propiedades para su control. El Asistente para objetos ATL no hace esto para usted automáticamente, ya que podría haber varios controles en el proyecto. Abra PolyCtl.h y agregue esta línea en el mapa de propiedades:

   PROP_ENTRY ("lados", 1, CLSID_PolyProp)

Mapa de propiedades del control ahora este aspecto:

BEGIN_PROP_MAP(CPolyCtl)
   PROP_DATA_ENTRY ("_cx", m_sizeExtent.cx, VT_UI4)
   PROP_DATA_ENTRY ("_cy", m_sizeExtent.cy, VT_UI4)
   PROP_ENTRY ("FillColor", DISPID_FILLCOLOR, CLSID_StockColorPage)
   PROP_ENTRY ("lados", 1, CLSID_PolyProp)
   / / Entradas de ejemplo
   / / PROP_ENTRY ("descripción de la propiedad", dispid, clsid)
   / / PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()

Podría haber agregado una PROP_PAGE macro con el CLSID de la página de propiedades, pero si usas el PROP_ENTRY macro como se muestra, las partes también guarda el valor de la propiedad cuando se guarda el control. Los tres parámetros a la macro son la descripción de la propiedad, el DISPID de la propiedad y el CLSID de la página de propiedades que tiene la propiedad sobre ella. Esto es útil si, por ejemplo, cargar el control en Visual Basic y establecer el número de lados en tiempo de diseño. Dado que el número de lados se guarda, al volver a cargar el proyecto de Visual Basic que se restaurará el número de lados.

Ahora construir ese control e insertarlo en ActiveX Control Test Container. En el Contenedor de prueba, en el menú Edición haga clic en Objeto de la clase PolyCtl. Aparece la página de propiedades; eligió la ficha de polígono.

Inicialmente se deshabilita el botón aplicar . Cuadro de edición de inicio escribiendo un valor en los lados y se activará el botón Aplicar. Cuando haya terminado de introducir el valor, haga clic en el botón aplicar . Los cambios de la pantalla de control y el botón aplicar nuevamente está desactivado. Pruebe a escribir un valor no válido y debería ver un cuadro de mensaje que contiene la descripción del error que establece desde el put_Sides función.

A continuación voy a poner el control en una página Web.

Con el paso 5 |nbsp; Con el paso 7

Index