|
|||||
|
|||||
|
|||||||
|
WTLでは標準コントロールやコモンコントロールの他に、独自のコントロール用クラスを用意しています。 ビットマップボタンは、ビットマップ画像からボタンの外観を作成できるボタンコントロールです。 WTLはビットマップボタンを作成するために CBitmapButtonというクラスを用意しています。
MFCにも同名のクラスがありますが、それとは使用方法が異なります。CBitmapButtonクラスはCButtonクラスから派生しています。
以下に示すのは、CBitmapButtonクラスを使用する例です。
下の図のような白いボタンを作成します。![]()
まず、リソースを作成します。ダイアログにボタンコントロールを配置し、 リソースIDを次のように指定します。
また、プロジェクトに次のようなビットマップリソースを IDB_BITMAP_BUTTONというIDで追加します。![]() このビットマップは、ボタンの4つの状態(通常の状態、押された状態、 フォーカスが当たっている状態、使用不可の状態)を表す一つの画像です。 次に、stdafx.h内では、 CBitmapButtonクラスを使用するためにatlctrls.hヘッダとatlctrlx.hヘッダをインクルードします。
なお、atlctrls.hヘッダを先にインクルードする必要があります。CMainDlgクラスでは、まず、
CBitmapButtonクラスのインスタンスをメンバ変数として宣言します。
これを使うためには、WM_INITDIALOGメッセージハンドラでサブクラス化する必要があります。次に、 WM_INITDIALOGメッセージハンドラでは、
ビットマップリソース(ID:IDB_BITMAP_BUTTON)からイメージリストを作成し、
それをSetImageList()によってビットマップボタンに設定します。
イメージリストを設定した後は、SetImages()によってイメージリストのインデックスとボタンの状態を関連付けます。
SetImages()は、第1引数から順に、通常の状態、押された状態、
フォーカスが当たった状態、使用不可の状態のイメージリストのインデックスを受け取ります。
さらに、ビットマップボタンには、SetToolTipText()によってツールチップを設定しています。最後に、リソースIDが IDC_BUTTON_BMPのコマンドメッセージハンドラとして、
OnButtonBmp()を追加します。
このハンドラでは単にメッセージボックスを表示しているだけです。このように、MFCのビットマップボタンではボタンの状態別の4つビットマップリソースを用意しなければならないのに対し、 WTLのビットマップボタンはイメージリストからボタンの外観を作成します。 WTLのビットマップボタンは、独自の拡張スタイルを用意しています。
これらの拡張スタイルは、 SetBitmapButtonExtendedStyle()によって設定します。
|