ツールバーの標準ボタン
標準ボタン画像を使う
ツールバーのボタン画像は自分で用意するほか、Windows標準の画像を使用することもできます。
多くのアプリケーションで共通のアイコンを使用することで、機能を分かりやすく示すことができます。
TBADDBITMAP構造体
自前で画像を用意するのと同じく、標準ボタン画像もツールバーに登録してから使用します。
画像の登録はTB_ADDBITMAPメッセージとTBADDBITMAP
構造体を使用します。
(これらの詳細は上記リンク先を参照してください)
標準ボタン画像はTBADDBITMAP構造体のhInst
メンバに定数HINST_COMMCTRL
を指定します。
nID
メンバに指定できるものはいくつか種類がありますが、とりあえず定数IDB_STD_SMALL_COLOR
を指定します。
TB_ADDBITMAPメッセージの送信では、通常は登録する画像の個数をWPARAMに指定しますが、ここでは0を指定します。
TBADDBITMAP tb;
tb.hInst = HINST_COMMCTRL;
tb.nID = IDB_STD_SMALL_COLOR;
SendMessage(hToolbar, TB_ADDBITMAP, 0, (LPARAM)&tb);
//WPARAMは0で良い
これで標準ボタンの画像がツールバーに登録された状態になります。
TBBUTTON構造体
登録した画像はTBBUTTON構造体のiBitmap
メンバ(先頭のメンバ)に指定することで実際に表示することができます。
TBBUTTON tbb[] = {
{ STD_FILENEW, IDC_FILENEW, TBSTATE_ENABLED, BTNS_BUTTON },
{ STD_FILEOPEN, IDC_FILEOPEN, TBSTATE_ENABLED, BTNS_BUTTON },
{ STD_FILESAVE, IDC_FILESAVE, TBSTATE_ENABLED, BTNS_BUTTON }
};
SendMessage(hToolbar, TB_ADDBUTTONS, (WPARAM)3, (LPARAM)&tbb);
上のコードではSTD_FILENEW
、STD_FILEOPEN
、STD_FILESAVE
を指定しています。
名前の通り、「新規作成」「ファイルを開く」「ファイルの保存」に使用されるアイコンです。
それぞれのボタンにどのような機能を実装するかはプログラマ次第ですが、多くのユーザーの認識とは異なるようなものは避けたほうが良いでしょう。
他の画像についてはページ最後にまとめておきます。
サンプルコード
ツールバー作成関数の全体のコードです。
#define IDC_FILENEW 101
#define IDC_FILEOPEN 102
#define IDC_FILESAVE 103
HWND CreateToolbar(HWND hWnd)
{
//コモンコントロールの初期化
INITCOMMONCONTROLSEX icc;
icc.dwSize = sizeof(INITCOMMONCONTROLSEX);
icc.dwICC = ICC_BAR_CLASSES;
InitCommonControlsEx(&icc);
//ツールバー作成
HWND hToolbar = CreateWindowEx(0, TOOLBARCLASSNAME, NULL,
WS_CHILD | WS_VISIBLE,
0, 0, 0, 0,
hWnd, NULL, hInst, NULL);
//ツールバー初期化処理
SendMessage(hToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
SendMessage(hToolbar, TB_SETBITMAPSIZE, 0, MAKELPARAM(16, 15));
//ボタン画像の登録
TBADDBITMAP tb;
tb.hInst = HINST_COMMCTRL;
tb.nID = IDB_STD_SMALL_COLOR;
SendMessage(hToolbar, TB_ADDBITMAP, 0, (LPARAM)&tb);
//ボタンの登録
TBBUTTON tbb[] = {
{ STD_FILENEW, IDC_FILENEW, TBSTATE_ENABLED, BTNS_BUTTON },
{ STD_FILEOPEN, IDC_FILEOPEN, TBSTATE_ENABLED, BTNS_BUTTON },
{ STD_FILESAVE, IDC_FILESAVE, TBSTATE_ENABLED, BTNS_BUTTON }
};
SendMessage(hToolbar, TB_ADDBUTTONS, (WPARAM)3, (LPARAM)&tbb);
return hToolbar;
}
画像やボタンの追加
ツールバーへの画像やボタンの追加は、必要に応じて分割して行うことができます。
例えば標準ボタン画像と自前の画像の両方を使用したい場合は別々に登録することになります。
#define IDC_FILENEW 101
#define IDC_FILEOPEN 102
#define IDC_FILESAVE 103
#define IDC_A 111
#define IDC_I 112
#define IDC_U 113
#define IDC_E 114
#define IDC_O 115
HWND CreateToolbar(HWND hWnd)
{
//コモンコントロールの初期化
INITCOMMONCONTROLSEX icc;
icc.dwSize = sizeof(INITCOMMONCONTROLSEX);
icc.dwICC = ICC_BAR_CLASSES;
InitCommonControlsEx(&icc);
//ツールバー作成
HWND hToolbar = CreateWindowEx(0, TOOLBARCLASSNAME, NULL,
WS_CHILD | WS_VISIBLE,
0, 0, 0, 0,
hWnd, NULL, hInst, NULL);
//ツールバー初期化処理
SendMessage(hToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
SendMessage(hToolbar, TB_SETBITMAPSIZE, 0, MAKELPARAM(16, 15));
//標準ボタン画像の登録
TBADDBITMAP tb;
tb.hInst = HINST_COMMCTRL;
tb.nID = IDB_STD_SMALL_COLOR;
SendMessage(hToolbar, TB_ADDBITMAP, 0, (LPARAM)&tb);
//ボタンの登録
TBBUTTON tbb[] = {
{ STD_FILENEW, IDC_FILENEW, TBSTATE_ENABLED, BTNS_BUTTON },
{ STD_FILEOPEN, IDC_FILEOPEN, TBSTATE_ENABLED, BTNS_BUTTON },
{ STD_FILESAVE, IDC_FILESAVE, TBSTATE_ENABLED, BTNS_BUTTON }
};
SendMessage(hToolbar, TB_ADDBUTTONS, (WPARAM)3, (LPARAM)&tbb);
//自前のボタン画像の登録
//(ビットマップ画像の加工)
COLORMAP colorMap;
colorMap.from = RGB(255, 255, 255);
colorMap.to = GetSysColor(COLOR_BTNFACE);
HBITMAP hbm = CreateMappedBitmap(hInst, IDB_BITMAP1, 0, &colorMap, 1);
TBADDBITMAP tb2;
tb2.hInst = NULL;
tb2.nID = (UINT_PTR)hbm;
int index = SendMessage(hToolbar, TB_ADDBITMAP, (WPARAM)5, (LPARAM)&tb2);
//ボタンの登録
TBBUTTON tbb2[] = {
{ 0, 0, 0, BTNS_SEP}, //セパレーター
{ index++, IDC_A, TBSTATE_ENABLED, BTNS_BUTTON },
{ index++, IDC_I, TBSTATE_ENABLED, BTNS_BUTTON },
{ index++, IDC_U, TBSTATE_ENABLED, BTNS_BUTTON },
{ index++, IDC_E, TBSTATE_ENABLED, BTNS_BUTTON },
{ index++, IDC_O, TBSTATE_ENABLED, BTNS_BUTTON }
};
SendMessage(hToolbar, TB_ADDBUTTONS, (WPARAM)6, (LPARAM)&tbb2);
}
標準ボタン画像と自前画像を使用したボタンをツールバーに追加したところです。
注意すべきは、TBBUTTON
構造体のiBitmap
メンバの指定です。
以前は0から順に番号を振っていましたが、今回はTB_ADDBITMAP
メッセージの戻り値を基準にしています。
TBADDBITMAP tb2;
tb2.hInst = NULL;
tb2.nID = (UINT_PTR)hbm;
int index = SendMessage(hToolbar, TB_ADDBITMAP, (WPARAM)5, (LPARAM)&tb2);
TBBUTTON tbb2[] = {
{ 0, 0, 0, BTNS_SEP}, //セパレーター
{ index++, IDC_A, TBSTATE_ENABLED, BTNS_BUTTON },
{ index++, IDC_I, TBSTATE_ENABLED, BTNS_BUTTON },
{ index++, IDC_U, TBSTATE_ENABLED, BTNS_BUTTON },
{ index++, IDC_E, TBSTATE_ENABLED, BTNS_BUTTON },
{ index++, IDC_O, TBSTATE_ENABLED, BTNS_BUTTON }
};
TB_ADDBITMAPメッセージの戻り値は、今登録した画像の先頭ボタン画像のインデックス(番号)です。
先にツールバーに登録した画像がある場合、新しく追加した画像のインデックスは登録済みの画像末尾の次の番号からになります。
例えば先にボタン5つ分の画像を登録している場合、0~4番がすでに使用されており、新しく追加する画像のインデックス(SendMessage関数の戻り値)は「5」となります。
これは標準ボタンでも同様です。
標準ボタン画像は定数で指定しますが(STD_FILENEW
など)、複数回画像を登録した場合は定数にTB_ADDBITMAP
メッセージの戻り値を加算する必要があります。
TBADDBITMAP tb;
tb.hInst = HINST_COMMCTRL;
tb.nID = IDB_STD_SMALL_COLOR;
SendMessage(hToolbar, TB_ADDBITMAP, 0, (LPARAM)&tb);
TBBUTTON tbb[] = {
{ STD_FILENEW, IDC_FILENEW, TBSTATE_ENABLED, BTNS_BUTTON },
{ STD_FILEOPEN, IDC_FILEOPEN, TBSTATE_ENABLED, BTNS_BUTTON },
{ STD_FILESAVE, IDC_FILESAVE, TBSTATE_ENABLED, BTNS_BUTTON }
};
SendMessage(hToolbar, TB_ADDBUTTONS, (WPARAM)3, (LPARAM)&tbb);
//別の標準ボタンの登録
TBADDBITMAP tb2;
tb2.hInst = HINST_COMMCTRL;
tb2.nID = IDB_HIST_SMALL_COLOR;
int index = SendMessage(hToolbar, TB_ADDBITMAP, 0, (LPARAM)&tb2);
//定数にindexを加算する
TBBUTTON tbb2[] = {
{ HIST_BACK + index, IDC_BACK, TBSTATE_ENABLED, BTNS_BUTTON },
{ HIST_FORWARD + index, IDC_FORWARD, TBSTATE_ENABLED, BTNS_BUTTON }
};
SendMessage(hToolbar, TB_ADDBUTTONS, (WPARAM)2, (LPARAM)&tbb2);
標準ボタンビットマップ一覧
標準ボタンのビットマップ一覧です。
画像はTBADDBITMAP
構造体のnID
メンバに指定する定数により使用できる種類が異なります。
「○○_LARGE_○○」と「○○_SMALL_○○」という二種類があり、それぞれ画像は同じですがサイズが異なります。
IDB_HIST_LARGE_COLOR/IDB_HIST_SMALL_COLOR
IDB_HIST_LARGE_COLOR
とIDB_HIST_SMALL_COLOR
で使用できる画像の定数です。
定数 | 説明 |
---|---|
HIST_BACK | 戻る(左矢印) |
HIST_FORWARD | 進む(右矢印) |
HIST_FAVORITES | お気に入り |
HIST_ADDTOFAVORITES | お気に入りに追加 |
HIST_VIEWTREE | ビューツリー |
IDB_STD_LARGE_COLOR/IDB_STD_SMALL_COLOR
IDB_STD_LARGE_COLOR
とIDB_STD_SMALL_COLOR
で使用できる画像の定数です。
定数 | 説明 |
---|---|
STD_CUT | 切り取り |
STD_COPY | コピー |
STD_PASTE | 貼り付け |
STD_UNDO | 元に戻す |
STD_REDOW | やり直し |
STD_DELETE | 削除 |
STD_FILENEW | 新規作成 |
STD_FILEOPEN | ファイルを開く |
STD_FILESAVE | 保存 |
STD_PRINTPRE | 印刷プレビュー |
STD_PROPERTIES | プロパティ |
STD_HELP | ヘルプ |
STD_FIND | 検索 |
STD_REPLACE | 置き換え |
STD_PRINT | 印刷 |
IDB_VIEW_LARGE_COLOR/IDB_VIEW_SMALL_COLOR
IDB_VIEW_LARGE_COLOR
とIDB_VIEW_SMALL_COLOR
で使用できる画像の定数です。
定数 | 説明 |
---|---|
VIEW_LARGEICONS | 大きいアイコン |
VIEW_SMALLICONS | 小さいアイコン |
VIEW_LIST | リスト |
VIEW_DETAILS | 詳細 |
VIEW_SORTNAME | 名前順で並び替え |
VIEW_SORTSIZE | サイズ順で並び替え |
VIEW_SORTDATE | 日付で並び替え |
VIEW_SORTTYPE | ファイル種類で並び替え |
VIEW_PARENTFOLDER | ひとつ上のフォルダ |
VIEW_NETCONNECT | ネットワークドライブに接続 |
VIEW_NETDISCONNECT | ネットワークドライブから切断 |
VIEW_NEWFOLDER | 新しいフォルダ |