【Visual C++ 2008】【MFC】
ツールバークラス(CToolBar)を使用して、ダイアログに4bit(16色)ビットマップ付きボタンを実装する方法。
(24bitビットマップの場合は、
「ダイアログにビットマップ付きボタンを実装する(24bitカラー編)」
を参照のこと)
(1)
リソースビューにて、[リソースの追加]でToolbarを追加する。
もしくは、rcファイルを直接書き換えるなら、以下の通り。
(例)
ツールバーのIDはIDR_TOOLBAR1、ビットマップの場所はres\toolbar1.bmp、
ボタンは1個あたり横40ドット*縦50ドットを3個、ボタンのIDはIDBUTTON1,IDBUTTON2,
IDBUTTON3、2番目と3番目のボタンの間に明確な区切り(すきま)を入れる場合。
IDR_TOOLBAR1 BITMAP "res\\toolbar1.bmp"
IDR_TOOLBAR1 TOOLBAR 40, 50
BEGIN
BUTTON IDBUTTON1
BUTTON IDBUTTON2
SEPARATOR
BUTTON IDBUTTON3
END
ビットマップは、ボタンを横に並べた物(上記の例なら120*50ドット)をペイント等の外部ツールで作成してもよい。 その際、ボタン間の区切りは意識しない(区切りは、あくまでSEPARATORで指定)。
rcファイルを直接書き換えた場合は、追加したIDをresource.hのdefineにも追加しておくこと。 数字は、同一画面上のコントロールで重複しないようにする。
(2)
ダイアログのクラスヘッダのprivateに、ツールバーのメンバ変数定義を追加。
CToolBar m_wndToolBar;
(3)
OnInitDialogの「// TODO: 初期化をここに追加します。」より後にて、ツールバーを読み込む。
if (!m_wndToolBar.Create(this) || !m_wndToolBar.LoadToolBar(IDR_TOOLBAR1))
{
// ツールバー作成失敗
//
//
//
return TRUE;
}
// ツールバーのサイズ取得
CSize sizeToolBar = m_wndToolBar.CalcFixedLayout(FALSE, TRUE);
// ダイアログの左上にツールバー表示
m_wndToolBar.MoveWindow(0, 0, sizeToolBar.cx, sizeToolBar.cy);
// ボタンをフラット化(下記を記述しない場合、通常のボタンになる)
m_wndToolBar.ModifyStyle(0, TBSTYLE_FLAT);
(4)
各ボタンの動作を実装する方法は、通常のボタンと同じように、メッセージマップに追加する。
各ボタンの動作に対応するメンバ関数を、それぞれOnButton1,OnButton2,OnButton3とすると、以下の通り。
ON_COMMAND(IDBUTTON1, OnButton1)
ON_COMMAND(IDBUTTON2, OnButton2)
ON_COMMAND(IDBUTTON3, OnButton3)
(5)
各ボタンの有効・無効(グレー化)を制御するには、以下の通り。
フラグのデフォルトはTRUE(有効)。
CToolBarCtrl& toolBarCtrl = m_wndToolBar.GetToolBarCtrl();
toolBarCtrl.EnableButton(ボタンのID, フラグ);
(メモ)
- CToolBarはCControlBarの派生クラス、CControlBarはCWndの派生クラス
- MSDNライブラリの 「CToolBar」「CControlBar::CalcFixedLayout」「CSize」「CWnd::MoveWindow」「CWnd::ModifyStyle」「CToolBarCtrl::EnableButton」 を参照のこと
- (関連項目) ビットマップの背景を透明化する