この記事は Bob Ryan の投稿です。
Source Code (3Kb) とDemo Project (13Kb) がダウンロードできます。
Windows アーキテクチャの問題の1つはグレー以外の色でボタンを描画することができないことだ。ここで提供されるクラスは最先端技術ではなく、多くの人々が使いたがるようなものだ(特にマルチメディアのアプリケーションでは)。ボタンを描画する唯一の方法は、オーナードローを使うかビットマップを作るという恐ろしい解決法だけだ。CColorButton
は このようなことを見えないところでやってくれて、次のようなことができる。
最初の例で水色のボタンと青いテキストが表示されていて、2番目の例では複数の色付きボタンが異なるテキスト色で表示されている。注:CTLCOLOR は背景を変えるがボタンは変えない。


ダイアログの OnInitDialog() 関数の中でオーナードローボタンを初期化するために、Attach() 関数を使う。
BOOL Attach(const UINT nID, CWnd* pParent,
const COLORREF BGColor = RGB(192, 192, 192),
const COLORREF FGColor = RGB(1, 1, 1),
const COLORREF DisabledColor = RGB(128, 128, 128),
const UINT nBevel = 2);
最初の2つの引数は必要だ。背景、テキスト色、無効時の色はデフォルトでは、グレーのボタン、黒のテキスト、ダークグレーの無効テキストとなっている。
VERIFY(m_btn1.SetColors(IDOK, this, CLOUDBLUE, DKBLUE, WHITE)); VERIFY(m_btn2.SetColors(IDCANCEL, this, DKBLUE, WHITE));
注: この例で使われている色(BLACK, WHITE, BLUE, DKGRAY etc.) はプログラムで定義した COLORREF 定数です。
const COLORREF CLOUDBLUE = RGB(128, 184, 223); const COLORREF WHITE = RGB(255, 255, 255); const COLORREF BLACK = RGB(1, 1, 1); const COLORREF DKGRAY = RGB(128, 128, 128); const COLORREF etc...
マルチメディアアプリケーションに役に立つ簡単な方法だった。これはとても簡単なクラスで、ちょっとした知識があれば関数を追加したり改良したりできるだろう。
Last updated: 9 May 1998