Почему метод DrawiTem моего владельца Draw Islox Listbox не может быть вызван

StackOverflow https://stackoverflow.com/questions/3404178

Вопрос

Я пытаюсь написать списку Draw Issover с WTL. Мой код выглядит так

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

Я также добавил REFLECT_NOTIFICATIONS В петле сообщения родителей и установите нарисовать владельца для фиксированного в листе свойств. Но я до сих пор не могу получить сообщение. Затем я использовал SPY ++, чтобы изучить сообщение о том, что приема списка, я нашел несколько сообщений, который очень странный (WM_USER+7211).
Моя ОС - WinXP и использует VS2008.

Это было полезно?

Решение

  • Bs_ownerdraw? Это стиль кнопки.
  • Даже с lbs_ownerdrawfixed, вам все еще нужно обрабатывать wm_measureitem.
  • Некоторые контрольные стили (например) lbs_ownerdrawfixed могут Только Установите, когда будет создан элемент управления (в том, что то, что вы подразумеваете под «и набор владельца, чтобы зафиксирован в листе свойств»?, Если так, зачем изменить стиль в коде?)

Этот форум нить может также помочь ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top