PRB: Propiedad de apariencia utiliza Windows 4.0 WS_EX_CLIENTEDGE

Seleccione idioma Seleccione idioma
Id. de artículo: 152000 - Ver los productos a los que se aplica este artículo
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Expandir todo | Contraer todo

En esta página

Síntomas

Controles MFC admiten un conjunto de propiedades estándar. Una de estas propiedades es la apariencia (DISPID_APPEARANCE). Apariencia se implementa para darle una apariencia tridimensional a un control. Si el control se utiliza en una versión de Windows o Windows NT 4.0 menor, la propiedad Appearance no afectará a la apariencia del control en tiempo de ejecución.

Causa

En tiempo de ejecución, la propiedad Appearance se implementa en un control MFC estableciendo un estilo de ventana extendido WS_EX_CLIENTEDGE. Este estilo de ventana no se admite en las versiones de Windows o Windows NT 4.0 menor.

Solución

Es posible proporcionar su propia implementación de la propiedad Appearance aunque esta técnica no funcionará para controles subclases de Windows.

Estado

Este comportamiento es por diseño.

Más información

Mediante el Asistente para clases, agregar la propiedad de apariencia estándar pero elegir métodos Get/Set sino acepta la implementación estándar. En el control, declare una variable miembro de tipo BOOL para representar la propiedad Appearance. Las funciones Get/Set stock se pueden copiar y cambiadas ligeramente para manipular esta variable, así como controlar los requisitos de enlace de propiedad. En la función de dibujo, dibuje un borde 3D en función del valor de esta variable.

Código de ejemplo

   // these get and set functions are the same as the original with a minor
   // change (noted in the code)

   short CTestAppearanceCtrl::GetAppearance()
   {
       return m_MyAppearance;
   }

   void CTestAppearanceCtrl::SetAppearance(short nNewValue)
   {
       if (nNewValue != 0 && nNewValue != 1)
           ThrowError(CTL_E_INVALIDPROPERTYVALUE,
                      AFX_IDP_E_INVALIDPROPERTYVALUE);

       // Is the property changing?
       if (m_MyAppearance == nNewValue)
           return;

       if (!BoundPropertyRequestEdit(DISPID_APPEARANCE))
           SetNotPermitted();

   // changed from original
       // do not use the WS_EX_CLIENTEDGE style
       //ASSERT((m_hWnd == NULL) ||
       //  ((GetExStyle() & WS_EX_CLIENTEDGE) == (DWORD)(m_sAppearance ?
       //      WS_EX_CLIENTEDGE : 0)));

       m_MyAppearance = nNewValue;
       SetModifiedFlag();

       //ToggleAppearance(this);
   // end of changes

       OnAppearanceChanged();

       BoundPropertyChanged(DISPID_APPEARANCE);
   }

   void CTestAppearanceCtrl::OnDraw(
               CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
   {
       // TODO: Replace the following code with your own drawing code.
       pdc->FillRect(rcBounds,
            CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
       pdc->Ellipse(rcBounds);

       // draw as 3D if m_appearance is set

       if(m_appearance)
       {
           CRect rect(rcBounds);
           pdc->DrawEdge(rect, EDGE_SUNKEN, BF_RECT | BF_ADJUST);
       }
   }
				

Propiedades

Id. de artículo: 152000 - Última revisión: miércoles, 12 de febrero de 2014 - Versión: 2.1
La información de este artículo se refiere a:
  • Microsoft Foundation Class Library 4.2 sobre las siguientes plataformas
    • Microsoft Visual C++ 4.0 Standard Edition
    • Microsoft Visual C++ 4.1 Subscription
Palabras clave: 
kbnosurvey kbarchive kbmt kbctrlcreate kbprb kbuidesign KB152000 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 152000

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com