Nano Hash - криптовалюты, майнинг, программирование

Почему метод DrawItem списка рисования моего владельца не может быть вызван

Я пытаюсь написать список для рисования владельца с помощью 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 в цикл сообщений родителя и установил для Owner Draw значение Fixed в листе свойств. Но я все еще не могу получить сообщение. Затем я использовал spy++ для проверки сообщения, которое получает список, я нашел очень странное сообщение (WM_USER+7211).
Моя ОС - WinXp, и я использую VS2008.


  • ModifyStyle слишком поздно, этот флаг должен быть включен при создании окна. Не уверен, как это делается в WTL. 04.08.2010

Ответы:


1
  • BS_OWNERDRAW? Это стиль кнопки.
  • Даже с LBS_OWNERDRAWFIXED вам все равно нужно обрабатывать WM_MEASUREITEM.
  • Некоторые стили элементов управления (такие как) LBS_OWNERDRAWFIXED могут быть установлены только при создании элемента управления (это то, что вы подразумеваете под «и установить для владельца Draw значение Fixed в листе свойств»? Если да, то зачем изменять стиль в коде?)

Эта ветка форума также может оказаться полезной...

04.08.2010
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..