#pragma twice

KAB-studio > プログラミング > #pragma twice > 172 Version 9.11 ツールバーリソース

#pragma twice 172 Version 9.11 ツールバーリソース

前のページへ 表紙・目次へ 次のページへ

 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 ツールバーを操作する! >
につづく!
透明色……
げ、まだ調べてるの?
 
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
RSSに登録
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
 
このページは、Visual C++ 6.0を用いた C++ 言語プログラミングの解説を行う#pragma twiceの一コンテンツです。
詳しい説明は#pragma twiceのトップページをご覧ください。