Pregunta

Trato de escribir un cuadro de lista propietario empate con WTL. Mi código es el siguiente

template<class T, class TBase = CListBox, class TWinTraits = CControlWinTraits>
class ATL_NO_VTABLE CMyListBoxImpl : 
   public CWindowImpl< T, TBase, TWinTraits >,
   public COwnerDraw< T >
{
...
BEGIN_MSG_MAP(CMyListBoxImpl)
    MESSAGE_HANDLER(WM_CREATE, OnCreate)
    MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
    MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBackground)
    MESSAGE_HANDLER(WM_SIZE, OnSize) 
    MESSAGE_HANDLER(WM_DRAWITEM, OnDrawItem)
    CHAIN_MSG_MAP(COwnerDraw< T >)
    DEFAULT_REFLECTION_HANDLER()
END_MSG_MAP()

...

void Init()
{
    ...
    ModifyStyle(0, BS_OWNERDRAW | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS);
    ...
}
void DrawItem(LPDRAWITEMSTRUCT lpdis)
{
  ...

También añadió REFLECT_NOTIFICATIONS en bucle de mensajes de los padres, y establece propietario Draw a fijo en la hoja de propiedades. Pero todavía no puedo recibir el mensaje. Luego utiliza Spy ++ para examinar el mensaje de que el cuadro de lista de recibir, me encontré con un cierto mensaje que es muy extraño (WM_USER+7211).
Mi OS es WinXP y el uso VS2008.

¿Fue útil?

Solución

  • BS_OWNERDRAW? Esto es un estilo de botón.
  • Incluso con LBS_OWNERDRAWFIXED, usted todavía tiene que WM_MEASUREITEM mango.
  • Algunos estilos de control (como) LBS_OWNERDRAWFIXED puede Sólo puede establecer cuando se crea el control (¿Es eso lo que quiere decir con "y establecer Propietario Draw a fijo en la hoja de propiedades" ?, si es así, ¿por qué modificar el estilo de código?)

Este hilo del foro también podría ser de ayuda ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top