¿Por qué el método DrawItem de mi cuadro de lista dueño del sorteo no se puede llamar
-
25-09-2019 - |
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.
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