Как выделить заголовок столбца при наведении курсора мыши? - PullRequest
0 голосов
/ 14 декабря 2011

У меня есть нарисованный владельцем заголовок элемента управления ListView.Если заголовок не нарисован владельцем, у нас есть хороший эффект наведения, когда мышь находится на одном из столбцов заголовка.После того, как я сделал владельца столбца заголовка нарисованным, я должен сам позаботиться об эффекте наведения.

Чтобы поймать его, я отслеживаю сообщение WM_MOUSEMOVE в окне заголовка, а когда получаю это сообщение, я перерисовываю столбецСначала заголовок с измененным фоном, а поверх этого я рисую текст и другую необходимую графику.Есть только один, но ... Шрифт текста становится жирным шрифтом .

Вы можете увидеть это ниже.Первый заголовок - мой, а второй - из проводника Windows с эффектом наведения на столбец «Дата изменения».

enter image description here

Почему шрифт вдруг становится жирным?Это правильный способ реализации эффекта парения?Может быть, я пропустил какое-то специальное уведомление для заголовка?

Ответы [ 2 ]

1 голос
/ 14 декабря 2011

В режиме рисования владельцем вы должны заботиться обо всем, включая шрифты.Не думайте, что вы знаете, какой сейчас шрифт DC.Если вы хотите определенный шрифт, вам нужно выбрать его в DC до рисования текста.

0 голосов
/ 14 декабря 2011

Ну, я разгадал эту загадку :) Хотя я до сих пор не знаю, почему шрифт, используемый в функции DrawThemeText, внезапно изменился в уведомлении WM_MOUSEMOVE.Мой подход все еще основан на перехвате события WM_MOUSEMOVE и перерисовке столбца под указателем мыши.Чтобы не изменять шрифт заголовка по умолчанию (как на рисунке в моем вопросе), я использовал следующий код, чтобы получить и установить его:

HFONT displayFont = (HFONT)SendMessage( header, WM_GETFONT, 0, 0 ); // gets default header font
SelectObject(hdc, displayFont); // sets device context to use newly found font

У этого решения есть по крайней мере один недостаток: я перерисовываю заголовокчасто (каждый раз, когда мышь перемещается в столбце заголовка).

...