CBitmapButton クラス
更新 : 2007 年 11 月
このトピックは、Visual Studio 2005 SP1 に合わせて更新されています。
ラベルがテキストではなくビットマップ イメージのプッシュ ボタン コントロールを作成します。
class CBitmapButton : public CButton
解説
CBitmapButton オブジェクトは、最大 4 つのビットマップを持ちます。それぞれのビットマップのイメージは、ボタンの状態を示します。つまり、ボタンが押されていない (通常) 状態、押された (選択された) 状態、フォーカスを得た状態、無効な状態の 4 つです。通常の状態を表すビットマップは必要ですが、その他のビットマップは省略できます。
ビットマップ ボタンのイメージは、イメージ自身はもちろん、イメージを囲む境界も含んでいます。境界はボタンの状態を表します。たとえば、フォーカスを得た状態を表すビットマップは、通常の状態のビットマップと変わりませんが、破線の長方形が境界の内側に表示されたり、境界が太い直線になったりします。また、無効な状態を表すビットマップは、通常の状態のビットマップと似ていますが、(淡色表示のメニュー項目のように) コントラストがはっきりしていません。
これらのビットマップのサイズは自由ですが、通常の状態を表すビットマップと同じ大きさとして処理されます。
用途に応じて、ビットマップ イメージの組み合わせが異なります。
押されていない状態 |
押された状態 |
フォーカスを得た状態 |
無効状態 |
アプリケーション |
---|---|---|---|---|
× |
|
|
|
ビットマップ |
× |
× |
|
|
WS_TABSTOP スタイルのないボタン |
× |
× |
× |
× |
すべての状態をとるダイアログ ボタン |
× |
× |
× |
|
WS_TABSTOP スタイルを持つダイアログ ボタン |
オーナー描画ボタンを指定するには、ビットマップ ボタン コントロールの作成時に BS_OWNERDRAW スタイルを設定します。これにより、Windows でボタンに対して WM_MEASUREITEM メッセージと WM_DRAWITEM メッセージが送信されます。フレームワークがこの 2 つのメッセージを処理し、ボタンの外観を管理します。
ウィンドウのクライアント領域に、ビットマップ ボタン コントロールを作成するには
ボタンのビットマップ イメージを必要な数 (1 ~ 4) 作成します。
CBitmapButton オブジェクトを構築します。
Create 関数を呼び出して、Windows のボタン コントロールを作成し、CBitmapButton オブジェクトに結び付けます。
ビットマップ ボタンの構築後、LoadBitmaps メンバ関数を呼び出して、ビットマップ リソースを読み込みます。
ダイアログ ボックスにビットマップ ボタンを取り込むには
ボタンのビットマップ イメージを必要な数 (1 ~ 4) 作成します。
ダイアログ テンプレートを作成し、ビットマップ ボタンを配置する位置にオーナー描画ボタンを置きます。テンプレート内のボタンのサイズは問題になりません。
ボタンのキャプションを "MYIMAGE" などの値に設定し、IDC_MYIMAGE などのボタンのシンボルを定義します。
アプリケーションのリソース スクリプトの中で、ボタンの各イメージに ID を付けます。ID は、手順 3. でボタンのキャプションとして設定した文字列の後に、"U"(押されていない状態)、"D"(押された状態)、"F"(フォーカスを得た状態)、"X"(無効な状態) のいずれかの文字を付けます。たとえば、ボタンのキャプションが "MYIMAGE" の場合、ID は "MYIMAGEU"、"MYIMAGED"、"MYIMAGEF"、"MYIMAGEX" となります。ビットマップの ID は二重引用符で囲む必要があります。二重引用符で囲まないと、リソース エディタはリソースに整数を代入します。また、イメージを読み込むと MFC でエラーが発生します。
アプリケーションのダイアログ クラス (CDialog の派生クラス) に、CBitmapButton オブジェクトをメンバとして追加します。
CDialog オブジェクトの OnInitDialog ルーチンで、CBitmapButton オブジェクトの AutoLoad 関数を呼び出します。その際、パラメータとして、ボタン コントロールの ID と、CDialog オブジェクトの this ポインタを渡します。
ビットマップ ボタン コントロールからその親 (通常は、CDialog の派生クラス) に送信される Windows の通知メッセージ (BN_CLICKED など) を処理するときには、メッセージごとに、メッセージ マップのエントリとメッセージ ハンドラ メンバ関数を CDialog の派生オブジェクトに追加してください。CBitmapButton オブジェクトから送信される通知は、CButton オブジェクトから送信される通知と同じです。
クラス CToolBar は、ビットマップ ボタンに対して別のアプローチをします。
CBitmapButton の詳細については、「コントロール」を参照してください。
必要条件
ヘッダー : afxext.h
スマート デバイス開発者のためのメモ
このセクションは、Visual Studio 2005 SP1 に合わせて更新されています。
Visual Studio 2005 SP1 以降では、このクラスがスマート デバイス プロジェクトでサポートされます。
参照
処理手順
CTRLTEST サンプル : カスタム コントロールの実装