Почему метод DrawiTem моего владельца Draw Islox Listbox не может быть вызван
-
25-09-2019 - |
Вопрос
Я пытаюсь написать списку 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 могут Только Установите, когда будет создан элемент управления (в том, что то, что вы подразумеваете под «и набор владельца, чтобы зафиксирован в листе свойств»?, Если так, зачем изменить стиль в коде?)
Этот форум нить может также помочь ...
Не связан с StackOverflow