2011-12-14 16 views
0

私は、ListViewコントロールのオーナー描画ヘッダーを持っています。ヘッダーがオーナーでない場合、マウスがヘッダーの列の1つにあるとき、ホバー効果が得られます。ヘッダー列のオーナーを描いた後は、自分自身でホバー効果を処理する必要があります。マウスのホバーでヘッダー列を強調表示するにはどうすればいいですか?

これを捕まえるために、ヘッダウィンドウ内のWM_MOUSEMOVEメッセージを監視します。このメッセージが表示されたら、最初に背景が変更されたヘッダーの列を再描画し、その上にテキストやその他の必要なグラフィックスを描画します。ただ1つだけですが...テキストのフォントは太字のになります。

これは次のとおりです。最初のヘッダーは私のもので、2番目のヘッダーは日付変更された列のホバー効果を持つWindowsエクスプローラーのものです。

enter image description here

なぜフォントが急に大胆になっていますか? これはホバー効果を実装する正しい方法ですか?ヘッダー固有の通知がありませんでしたか?

答えて

1

オーナー描画モードでは、フォントを含むすべてのものを処理する必要があります。現在のDCフォントが何であるかを知っていると仮定しないでください。特定のフォントが必要な場合は、テキストを描画する前にDCに1つを選択する必要があります。

+1

Yup - その太字は、DCのデフォルトです。ポスターはWM_GETFONTをヘッダーコントロールに送信して、適切なフォントを取得できます。 – Bukes

+0

Yeap、私はそれを得るためにWM_GETFONTメッセージを使用しました。 – Robertas

0

私はこの謎を解決しました:)まだ私はまだ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 

このソリューションは、少なくとも一つの欠点を持っている:私は(あまりにも頻繁にヘッダーを再描画しますマウスがヘッダー列内を移動するたびに)。

関連する問題