MFC を使用してダイアログ プロジェクトを作成し、ボタンに色を付けようとしています。
ボタンの所有者に描画させるしか方法がないことを知りました。OnCtlColor()
ボタンには機能しません。
ボタンのオーバーライドに色を付けることができますOnDrawItem
が、問題は、その過程で 3D のクールな外観 (Win7 で得られるわずかに丸みを帯びた角) が失われることです。
ネイティブの外観を保持し、その上にボタンの色を付ける方法はありますか?
これは簡単な作業ではありません。テーマ コントロール (必要なもの) を使用している限り、テーマで許可されている以上のことはできません。
ボタンの描画を独自に再実装する必要があります。テーマ API を可能な限り利用して、テーマに沿った外観を維持しながら、独自の色を忍び込ませる必要があります。
ただし、次のように設定すると、.NET WinForms が行うことよりも優れたものはほとんど得られないことに注意してくださいButton.BackColor
。
Button BackColor を設定する方法の質問も参照してください。
WinFormsButtonStandardAdapter.PaintWorker
を逆アセンブルすると、使用する必要のあるアイデアと API が得られます。多くのコーディングを行う必要があることに注意してください。
C++/MFC コードについては、CodeProjectの Vista をテーマにした Owner-Drawn および Full-Custom Push/Menu/Image Buttonsをチェックしてください。おそらく実際には、既に必要なもの (SetBackgroundColor
メソッド) が実行されるため、再利用することができます。