2

MFC を使用してダイアログ プロジェクトを作成し、ボタンに色を付けようとしています。

ボタンの所有者に描画させるしか方法がないことを知りました。OnCtlColor()ボタンには機能しません。

ボタンのオーバーライドに色を付けることができますOnDrawItemが、問題は、その過程で 3D のクールな外観 (Win7 で得られるわずかに丸みを帯びた角) が失われることです。

ネイティブの外観を保持し、その上にボタンの色を付ける方法はありますか?

4

1 に答える 1

2

これは簡単な作業ではありません。テーマ コントロール (必要なもの) を使用している限り、テーマで許可されている以上のことはできません。

ボタンの描画を独自に再実装する必要があります。テーマ API を可能な限り利用して、テーマに沿った外観を維持しながら、独自の色を忍び込ませる必要があります。

ただし、次のように設定すると、.NET WinForms が行うことよりも優れたものはほとんど得られないことに注意してくださいButton.BackColor

ここに画像の説明を入力

Button BackColor を設定する方法の質問も参照してください。

WinFormsButtonStandardAdapter.PaintWorkerを逆アセンブルすると、使用する必要のあるアイデアと API が得られます。多くのコーディングを行う必要があることに注意してください。

C++/MFC コードについては、CodeProjectの Vista をテーマにした Owner-Drawn および Full-Custom Push/Menu/Image Buttonsをチェックしてください。おそらく実際には、既に必要なもの (SetBackgroundColorメソッド) が実行されるため、再利用することができます。

于 2013-04-14T07:42:25.630 に答える