Я хочу создать подкласс элемента управления ListBox и установить стиль LBS_OWNERDRAWVARIABLE
. Подклассы не проблема, и я могу получать сообщения через мой собственный WndProc. (На самом деле, в этом случае я делаю подкласс родителя ListBox, поскольку именно он должен получать сообщения WM_MEASUREITEM
и WM_DRAWITEM
). Проблема в том, что я никогда не получаю WM_MEASUREITEM
или WM_DRAWITEM
сообщений, а элемент управления продолжает рисовать сам.
Оба стиля должны поддерживаться в WM5.0 и выше:
WinCE3.0 не поддерживает ни: http://msdn.microsoft.com/en-us/library/ms959988.aspx
WinCE5.0 поддерживает оба: http://msdn.microsoft.com/en-us/library/aa453299.aspx
Даже LBS_OWNERDRAWFIXED
было бы началом, но я не могу заставить либо работать.
Мое лучшее предположение заключается в том, что стиль LBS_OWNERDRAWx
должен быть установлен во время CreateWindowEx()
, так как SetWindowLong()
, похоже, не меняет его. Если это так, CF не предоставляет никаких методов, которые позволяют мне переопределять создание окна, а также не предоставляет ничего вроде CreateParams (в полной структуре) или PreCreateWindow (), который позволяет изменять стиль окна перед созданием. (Они все есть в классе Control
, но они internal
, поэтому не доступны).
Кому-нибудь удалось успешно выполнить рисование владельца (даже ИСПРАВЛЕНО) с использованием фактического элемента управления ListBox Windows на CF? С другой стороны, кто-нибудь нашел способ переопределить стили окна, переданные CreateWindowEx () в элемент управления на основе элемента управления? Если да, поделитесь своими секретами: -)
Примечание: я не хочу создавать элемент управления списком с нуля; Я могу сделать это, и есть множество хороших примеров этого, но это не тот вопрос, о котором идет речь.
CF2.0; WM6.1.