この記事は Davide Calabro からの投稿です。
Environment: VC6 SP4, NT4, Win2000, Win9x
近頃、なにもかもスキンがされたりカスタマイズされたりしている。Windows XP を見たことがあれば、ボタンでさえ今まで我々が見てきたものとまったく違うことに気づくだろう。私はあまりカスタマイズをしすぎることは好きではないが、 Davide Pizzolato により投稿された CxShadeButton と呼ばれるボタンコントロールのクラスが人気のあることは知っている。私のアイディアは CButtonST(MFCのフラットボタンの参照コントロール) から1つか2つの仮想関数を利用可能にすることだ。開発者は CButtonST コントロールから自分のクラスを派生させることが出来る。
この新しい機能を見せるために、CxShadeButton の見た目と感じをもう一度作り直すことに決めた。オリジナルのコードから CxDib と呼ばれるクラスと背景効果を作るコードを抜き出した。このコードの断片はDavide Pizzolato 氏による。
CButtonST は2つの仮想関数を利用可能にしている。
この関数はボタン背景の描画が必要なときに呼び出される。
ボタンが透明モードならこの関数は呼ばれない。
// パラメータ:
// [IN] pDC
// デバイスコンテキストのオブジェクトへのポインタ
// [IN] pRect
// 描画されたエリアの境界をあらわす CRect オブジェクトへのポインタ
//
// 戻り値:
// BTNST_OK
// 関数が成功した
//
DWORD OnDrawBackground(CDC* pDC, LPCRECT pRect)
この関数はボタンの境界が描画される必要があるときに呼ばれる。
ボタンがスタンダードモード(フラットモードでない)場合はこの関数は呼ばれない。
// パラメータ:
// [IN] pDC
// [IN] pRect
//
// 戻り値:
// BTNST_OK
//
DWORD OnDrawBorder(CDC* pDC, LPCRECT pRect)
開発者は新しいクラスの中でこれら2つの関数を実装することで CButtonST から派生させる。
CButtonST のデモアプリは新しい効果をどのように実装するかを示すページを含む。CShadeButtonST クラスは CButtonST から派生し、OnDrawBackground メソッドの中で新しい効果が実装されている。
このアーキテクチャはデフォルトでは利用できないボタンも作ることが出来る。もし誰かが Windows XP にあるような新しいボタンを作ったら、喜んで次の CButtonST デモアプリに入れよう。