2015-09-28 2 views
1

У меня есть ListView, элементы которого полностью нарисованы с использованием моего кода. Конечно, я использую данные, предоставляемые NMLVCUSTOMDRAW, в основном RECT. Есть два прямоугольника p-> nmcd.rc и p-> rcText, первый из которых содержит достоверную информацию, а другой - всегда 0. Эта проблема заключается в том, что nmcd.rc не содержит корректного rect в Windows XP. Я получаю 0,1, 0,2 или что-то в этом роде.C++ - ListView Custom Drawn в Windows XP

Поскольку это не сработало, я попытался использовать ListView_GetItemIndexRect, который не работает в Win XP, в то время как он работает на Win 7/10.

Глядя на ListView_GetItemIndexRect's msdn page Я вижу, что, по-видимому, он работает только на Vista +. В то же время некоторые другие функции ListView, перечисленные как Vista +, отлично работают в Windows XP.

Windows XP редко встречается среди пользователей моей программы, но все же я бы хотел, чтобы она отлично функционировала. Составление полного списка на моем собственном уровне наверняка устранит проблему, но это тупик.

ответ

1

Заканчивать первый комментарий на этой странице:

https://msdn.microsoft.com/en-us/library/windows/desktop/bb774778%28v=vs.85%29.aspx

Обработка подпозиция сообщений предварительно краски на Windows XP (возможно, все до Vista, системы?) Обработчик получает неправильный верх и низ значения в NMLVCUSTOMDRAW :: nmcd.rc, иногда они равны нулю, иногда не обновляются с момента вызова предыдущего обработчика (так что основная идея - , что они оставлены неинициализированными comctl32 caller). Для того, чтобы получить правильную позицию подпозиция обработчик должен явно получить прямоугольник с помощью отдельного сообщения/звонка:

RECT Position; ListView.GetSubItemRect((INT) pHeader->nmcd.dwItemSpec, pHeader->iSubItem, LVIR_BOUNDS, &Position);

+0

Я забыл упомянуть, что я попытался с помощью GetSubItemRect, как хорошо, и это не сработало. На самом деле я не могу получить правильный RECT даже в Windows 10 с помощью этой функции, в то время как GetItemIndexRect работает нормально. – Dan