Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Системное программирование и WinAPI > То рисует рамку фокуса в ListView, то нет |
Автор: feodorv 1.8.2013, 14:30 | ||||||||||
Уважаемые форумчане! Может, кто сталкивался с подобной проблемой. Работаю на чистом WinAPI. Есть диалог с табом, при переключении которого отображается соответствующий ListView через ShowWindow( SW_HIDE/SW_SHOW ). Вседа работал в ListView с выбранными (SELECTED) элементами, но разрешал только один такой элемент. Теперь решил перейти на чисто фокусный элемент (FOCUSED) с тем, чтобы покрасивше можно было его оформить. Так вот, при одном запуске одной и той же программы ListView рисуется нормально, с прерывистой рамкой у фокусного элемента ListView, а при другом запуске - эта рамка уже не отображется (ни на одном ListView). Если бы не подсветил фокусный элемент другим цветом заднего плана, то и не поймёшь, где там фокус. При этом все клавиши перемещения текущего элемента (Up/Down/PgUp etc) работают исправно, фокус перемещается. Такое впечатление, что что-то недоинициализировано, и какая-то переменная получает случайное значение, но что именно, не могу понять. Чуть больше информации
|
Автор: feodorv 1.8.2013, 16:31 | ||
Вставил логгирование в обработчик уведомления NM_CUSTOMDRAW. Выяснил, что один и тот же элемент ListView отрисовывается дважды подряд. Естественно, рамка пропадает, поскольку DrawFocusRect второй раз просто стирает ранее нарисованную рамку:
Не прав. Когда рамка рисуется, данные тоже запрашиваются 2 раза подряд... |
Автор: volatile 1.8.2013, 19:59 | ||
Вот http://social.msdn.microsoft.com/Forums/vstudio/en-US/ba894549-acfc-4113-ab62-9c4069e87654/strange-focus-rectangle-behaviour что-то похожее на вашу проблему. Главный вывод из прочитанного: это таки обычное поведение для вендузятины (если вас это успокоит ![]() (подозреваю что поведение этой рамки еще слегка варьируется от версии венды) Ну а выход... может плюнуть на эту рамку и отрисовывать что-то похоже самому? Добавлено через 8 минут и 41 секунду
то есть она вообще только при заходе клавиатурой должна отрисовываться. а это не ваш случай. |
Автор: feodorv 1.8.2013, 21:06 |
Случай, кстати, явно похожий, только более тонкий))) Если при старте программы (когда активным становится первый ListView) в диалоге нажать два раза TAB, то прямоугольник фокуса появляется... |
Автор: feodorv 1.8.2013, 21:22 | ||||||||
Дело точно в установленном флаге UISF_HIDEFOCUS. Поставил на него проверку:
И что получил:
Кто-то из контролов всё испортил ![]() Вставил после initDialog в WM_INITDIALOG
Теперь так:
![]() |
Автор: feodorv 1.8.2013, 22:00 | ||||||||
Ну, кажись, всё ![]() Вместо
Да уж. Знаю по собственному опыту))) Да и в свиснутом у Microsoft коде полно комментов типа
или
![]() |
Автор: feodorv 1.8.2013, 22:38 |
Опять не прав. Так не починилось. Оставил WM_CHANGEUISTATE в WM_INITDIALOG, а WM_UPDATEUISTATE послал, когда исчерпалась очередь сообщений диалога. Танцы с бубнами, forever. |
Автор: volatile 2.8.2013, 11:56 |
feodorv, интуитивно чувтвую что - лучше все-же сделать своими руками. Даже если вы и отладите на своей ОS, не факт что глюк не вылезет на другой. Они же что-то там подкручивают еще. Еще и темы оформления бывают ... Как это будет там? никто знает... ![]() В общем я бы сделал подсветку своими руками. (Ну или клавиатурные комбинации посылайте чтоли, не знаю. но это .. ![]() |
Автор: feodorv 2.8.2013, 17:14 |
Да, согласен, "подушка безопасности" нужна))) Думаю как раз про этот вариант ![]() А чо? Нормальное решение - подождать, пока всё успокоится и нанести ответный удар ![]() |
Автор: volatile 2.8.2013, 23:10 |
ну если оно будет работать, то возможно ... Может кто что еще посоветует... Честно говоря, конкретно с этим, я дел не имел, просто почитал тот топик, и мне показалось что это одно из тех многочисленных мест в венде, где мелкомягкие устроили танцы с бубном. А это они делать умеют. Пару раз натыкался на такие места... Вроде бы уже все нормально, но в последний момент опять что-то вылазило ни с того, ни сего... ![]() А вобще писать гуй на чистом винапи... это что-то... ![]() |
Автор: feodorv 3.8.2013, 00:23 |
"Поживём - увидим" ©))) Да не, ссылка дана хорошая, симптомы почти совпадают. Я вот найти подобное не смог, пришлось в их сурсы лезть... Это мазохизм!!! Даже не знаю, чем оправдаться. Но вот так сложились обстоятельства ![]() |