Frage

ich versuche, einen Eigentümer Unentschieden listbox mit WTL zu schreiben. Mein Code sieht wie folgt aus

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)
{
  ...

Ich habe auch REFLECT_NOTIFICATIONS in der Nachrichtenschleife des Elternteils, und legen Sie Besitzer in Eigenschaftsblatt Fest Draw. Aber ich kann immer noch nicht die Nachricht empfängt. Dann habe ich Spion ++ um die Nachricht zu untersuchen, dass die Listbox erhalten, ich eine Nachricht gefunden, die sehr seltsam (WM_USER+7211).
Mein o ist WinXp und Verwendung VS2008.

War es hilfreich?

Lösung

  • BS_OWNERDRAW? Das ist eine Schaltfläche Stil.
  • Auch bei LBS_OWNERDRAWFIXED Sie noch brauchen, um Griff WM_MEASUREITEM.
  • Einige Steuerarten (wie) LBS_OWNERDRAWFIXED können nur gesetzt werden, wenn das Steuerelement erstellt wird (Ist das, was Sie unter „und legen Sie Besitzer in Eigenschaftsblatt Fest Unentschieden“ ?, wenn ja, warum ändern Sie den Stil in Code?)

Dieser Forum-Thread könnte auch hilfreich sein ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top