Version 9.11
ツールバーリソース
「前回まではツールバーのプログラム的な部分を見てみたけど、今回は実際
にツールバーを使ってみます」
『って、普通そっちの方が先なんじゃない?』
「かも……まぁその辺は置いといて。ツールバーはメニューとかと同じよう
に、リソース経由で操作します」
『うん、リソースに Toolbar ってあるね』
「その中の IDR_MAINFRAME をダブルクリックすると」
『お、ツールバーが出た。ボタンがいっぱい並んでる』
「左下には選択してるボタン、右下にはそのアップがあるでしょ。この右下
のアップのをアイコンと同じように編集すればOK」
『ツールもほとんどアイコンと同じだね』
「ほとんど同じ。ただ、透明色がちょっと違うかな」
『そーいえば、 Version 3.15 ( No.040 ) でやった透明がないね』
「どうも薄いグレーが透明色代わりみたいだね」
『薄いグレーで塗りたいときはどうするの?』
「どうするんだろうね……」
『水希ちゃん、透明色の変え方ってわんないの?』
「調べたけど分からなかった……」
『なさけな』
「う”……でも変えられないはずはないと思うし……イメージリストの背景
色なら変えられるからそっち経由でってことなのかな……でもそんなに手間
をかけなきゃいけないものなのかな……」
『おーいみずきちゃーん』
「あ、うん、やっぱ分からないや」
『まー普通、ウィンドウズの背景色ってグレーだからってことなのかもしれ
ないけど』
「でもXPじゃ話が違ってくるしなぁ……プログラムの方で変えられそうな
感じはあるんだけど、ま、とりあえずは変えられないってことで」
『むー』
「ボタンの描画はそんな感じ。ちなみに普通のものだけ描けば、淡色表示の
とかは自動的に作ってくれるから」
『その辺は便利ねー』
「で、ツールバーリソースのポイントは、上に横一列になってるツールバー
そのもの」
『これはアイコンにはないもんね』
「まず、一番右端にあるグレー一色のボタン。これはボタンを新しく追加す
る時に選んで」
『メニューの時に端にあったのと同じ?』
「そう、あれと同じ。詳しくは Version 9.02 ( No.163 ) 参照」
『もしかして、かなり色々メニューと同じ?』
「いろいろってどこまで言ってるのかは分からないけど、まぁ少しは。メ
ニューみたいにツリー構造じゃないけど」
『それくらい分かるよ……』
「横一列だけだからね。並べ替えはボタンを横にドラッグすれば、ボタンと
ボタンの間に移せるから」
『スペースってどう入れるの?』
「これは、ドラッグですこーし離すように動かしてからドロップすればでき
るよ」
[■][▼][●]
「ってなってて、■と▼の間にスペースを入れる時には▼の上で左ボタンを
押して、ほんのちょっと右に動かしてから離せば」
[■] [▼][●]
「ってなるから」
『その右のも全部ずれるんだね』
「ボタンの削除は、ドラッグして全然違うところでドロップすれば消えるか
ら」
『デリートボタンじゃ……あ、色が消えただけだった……』
「あとは普通の編集機能は使えるから。じゃ、今度はプロパティについて。
プロパティはボタンの上でダブルクリック……あ」
『色が変わった』
「じゃなくて、上のツールバーの方のボタンね」
『あー』
「プロパティはメニューに比べるとかなりシンプル」
『【一般】ページだけだし。 ID ってメニューのとかと同じ ID ?』
「そう、意味としてもそうだし、実際の ID としても」
『どゆこと?』
「ツールバーの左から2番目の、黄色いファイルケースみたいなボタンの
ID は」
『 ID_FILE_OPEN 、あ、ファイルを開くのだ』
「実際に試してみると」
『ビルドして実行! あ、ホントにファイルを開くダイアログが出た』
「つまり、 ID はメニューやアクセラレーターとかと共用ってこと」
『あ!』
「な、なに?」
『もしかして淡色表示のも!?』
「そう、その通り。その辺を試してみようか。方針としては Version 9.07
( No.168 ) のアクセラレーターの時と同じ。適当なボタンの ID を
ID_MENU_TEST にして」
『ほい』
「その状態でビルドして実行すれば」
『 Version 9.06 ( No.167 ) で作った CMainFrame::OnMenuTest() が……
あれ? 呼ばれない?』
「……あ!」
『ど、どしたの?』
「 Version 9.08 ( No.169 ) でアクセラレーターのテストでこのメンバ関
数使ってたんだね……このメンバ関数」
void CMainFrame::OnMenuTest()
{
TRACE( "メニュー、アクセラレーター、ツールバーから\n" );
}
「って修正して」
『えー? せっかくアクセラレーターの作ったのに』
「バックナンバー読めばいつでもできるんだから」
『あ、そっか』
「で、こう修正してからなら」
『ビルドして実行! うん、ツールバーのボタンを押すとこれがアウトプッ
トウィンドウに出る!』
「あ、そうだ。メニューとアクセラレーターからもこのメンバ関数が呼ばれ
ることも確認しておいて」
『そうだね。メニューは前に作ったのが……あった。ぽちっと。うん、出
た。アクセラレーターは確か Ctrl + A っと。うん出たよ』
「というわけで、 ID はメニューとアクセラレーター、そしてツールバー共
通ってこと」
『ひとつひとつメンバ関数作ってたら面倒だもんね』
「で、もうひとつの共通部分、淡色表示」
『 Version 9.06 ( No.167 ) で作った CMainFrame::OnUpdateMenuTest()
だね』
「これをそのときのように修正します」
void CMainFrame::OnUpdateMenuTest(CCmdUI* pCmdUI)
{
bool bIsSetEnable;
// ここで、現在の状態を調べて TRUE か FALSE を入れます。
// ここではボタンを淡色表示にするため FALSE を渡します。
bIsSetEnable = FALSE;
// 許可/不許可をセットします。
pCmdUI->Enable( bIsSetEnable );
}
『 FALSE を渡すから淡色表示になるんだよね』
「そう、試してみて」
『ビルドして実行! お、ボタンが淡色表示! もちろん押せないし』
「念のため、メニューとアクセラレーターの方も」
『あ、そうだそうだ。メニューの方は……うん、淡色表示になってる。アク
セラレーターも効かないし』
「というわけで、この淡色表示の機能も」
『メニュー、アクセラレーター、そしてツールバー共通ってわけねー。これ
は便利かも』
「ちなみにこれは MFC を使ってるから」
『げ! MFC 使わないと自動でできないの!?』
「淡色表示の方はね。淡色表示の管理は自分で作るとかなり大変そう……」
『あれ? ってことは普通のコマンドの方は大変じゃない?』
「うん、こっちは共通化できるかな。 WM_COMMAND って憶えてる?」
『 Version 8.09 ( No.151 ) でやったね。ボタンが押されたときに送られ
てくるメッセージだね』
「で、 Version 9.06 ( No.167 ) でも少し触れたけど、メニューを選択し
た時にもこのメッセージが送られてくるんです」
『あ!』
「そう、実はアクセラレーターの時もツールバーのボタンを押したときも」
『 WM_COMMAND が送られてくるんだ。ならなんとかなりそうねー』
「あ、そうだ。そういえばまだプロパティが残ってた」
『あ、そういえば』
「幅と高さはそのままボタンの幅と高さ。ただし」
『げ、全部でかくなっちゃった!』
「と、個別のボタンの幅と高さを変えることはできないので注意」
『ならひとつひとつのプロパティに含めないで……』
「最後にプロンプト」
『って、これはメニューにもあったね』
「そう、ここの文字列を」
テストです\nテスト
「ってすると、ステータスバーに」
テストです
「って出るから」
『って、【\nテスト】はどこに? 改行になんの意味が?』
「こっちはツールチップ。ボタンの上にカーソルを置いて少し待つと」
『【テスト】って出た!』
「つまりこのプロンプトの \n の右側はツールチップの文字列ってこと」
『……そんなの知らなきゃ絶対わかんないじゃん……』
「まー、【ファイルを開く】とかも同じような書式で書いてあるからそれマ
ネすればって感じかな」
『わかりにくー』
/*
Preview Next Story!
*/
『わざわざこんなプロンプトの使い方しなくてもいいのに』
「だよね、この辺って MSDN にもあまり書いてないし」
『その代わりに水希ちゃんが教えてくれるってことなんだろうけど』
「いや……」
『? どしたの?』
「僕が調べるにしても限界が……」
『あらら』
「というわけで次回」
< Version 9.12 ツールバーを操作する! >
『につづく!』
「透明色……」
『げ、まだ調べてるの?』