Version 9.02
メニューってなんなの?
「今回は火美ちゃんのリクエストにお答えして、メニューについて見ていき
ます」
『ずっとダイアログばっかだったから、そういうのが面白うそう』
「面白いかどうかは微妙だけどね。えーっと、まず、メニューがなんなのか
ひとつずつ見ていきます。まず、メニューはリソースの一種です」
『うん、 ResourceView に【Menu】ってあるもんね。このリソース ID が
IDR_MAINFRAME だけど、これってどっかで……』
「アイコンがそうだね。 Version 3.14 ( No.039 ) を参考にってことで」
『アイコンと同じでいいの? アイコンを使おうとしたらメニューだったっ
てことは』
「ないから大丈夫。リソースの種類が違えば ID は同じでいいから」
『だから同じ IDR_MAINFRAME ……でも変な名前よね』
「前回、一番外側のウィンドウをフレームウィンドウって言ったよね」
『うん。フレームウィンドウ、メインフレーム、似てるね』
「そう、 IDR_MAINFRAME はそのフレームウィンドウのリソースって意味」
『アイコンもメニューもそのフレームウィンドウ用、だから同じ
IDR_MAINFRAME なわけね』
「ちなみに……その ResourceView の【Menu】IDR_MAINFRAME を右クリック
してプロパティを出すと」
『 ID 変えるのだね』
「ここで ID を IDR_A=300 ってしてみて」
『 =300 ってなんだっけ』
「リソース ID って実際には整数値で、その整数値を直接指定するときにこ
ういうふうにします。詳しくはさっきの Version 3.14 を参考に」
『こうすれば IDR_A の値そのものを 300 にできるのね』
「こうしてからビルドして実行すると……」
『あら、【空のドキュメント作成に失敗しました】って出た』
「と、メニューが見つからないから実行できなくなっちゃいます」
『つまり IDR_MAINFRAME じゃなきゃいけないってわけね』
「そゆこと。だからとりあえず元に戻して」
『ほいほい』
「これとか、前回ちょっと触れたドキュメント/ビューアーキテクチャーと
かは、 MFC で SDI を使う上でのルールみたいなもの。これからこういうの
がどんどん出てきます」
『うー、なんか面倒そう』
「うん、面倒そうって心に留めといて」
『へ?』
「こういうの使いにくい、って憶えておけば自分で造る時に参考になるで
しょ」
『そんな日来るの?』
「来なきゃ。さて、話を戻して、メニューはリソースだから、もちろんリ
ソースエディタで修正できます。 IDR_MAINFRAME をダブルクリックして」
『リソースエディタにメニューが出てきた。でも横長だけだけど』
「各項目、たとえば【ファイル】とか選べば」
『お、ファイルのメニューが出て来た』
「と、それ以降のメニューも全部編集できるから」
『おー』
「ここでまず、用語を憶えてもらうね」
『げ』
「って言っても難しくないから。まず最初に出てきた横棒。このメニューを
【メニューバー】って言います」
『メニューバー、ってそのままね』
「で、メニューバーの各アイテムをクリックして出てくるメニュー、これを
【サブメニュー】とか【ポップアップメニュー】って言います」
『サブメニューは分かるけど、ポップアップメニューって?』
「ポップアップ、つまり新しく作られて現れるメニューってこと。メニュー
バーは最初からあって消えないけど、ポップアップメニューは」
『ぱっと現れて、ぱっと消えちゃうわけね』
「だから、右クリックメニューなんかもポップアップメニューだから」
『あれはメニューバーはないわけね』
「メニューバーはウィンドウのタイトルバーの下に置くためだけのもの。だ
から……前回、ツールバーとかはウィンドウだけど、メニューはウィンドウ
じゃなかったっていうの見たでしょ」
『うん、メニューはフレームウィンドウの一部だったね』
「でも、ポップアップメニューはウィンドウ」
『へ!? メニューってウィンドウなの!?』
「そう、まぁ Spy++ で拾うのはかなり苦労するから分からないと思うけ
ど、ポップアップメニューはウィンドウの一種」
『へー』
「だから、メニューバーとポップアップメニューはかなり違うもので、使い
道とかも異なってくるから、この辺の違いは憶えておいて」
『それをあとで使うときが来る?』
「結構すぐにね。メニューバーとポップアップメニューについてはここま
で。次に各メニューアイテムについて見ていきます」
『ほい』
「まず【ファイル】−【開く】のプロパティを表示させて」
『この辺はダイアログコントロールと同じね』
「 ID の ID_FILE_OPEN 、これはファイルを開くための ID で、 MFC の中
にはこれが送られてくると〈ファイルを開く〉ダイアログが表示されるよう
に初めから作られてます」
『あらホントだ。便利ねー。次の……【開く(&O)...\tCtrl+O】って何?』
「キャプション、つまりメニューに表示される文字列」
『それは分かるんだけど、なんか記号とか色々入ってる……』
「じゃ、ひとつひとつ。まず &O 。これは前にやってるよ」
『え、そうなの?』
「 Version 5.01 ( No.066 ) でやった、ダイアログコントロールを Alt
キーで使うためのものと同じ」
『あー! あの _ が付くのね』
「でもちょっと使い方は違うけどね。まず SdiTest 実行して」
『ほい』
「この状態で Alt キーを押すと」
『 Alt キーだけ? 一緒に何か押さなくていいの?』
「うん、 Alt キーだけ押すと、【ファイル】がへこんだ状態になるで
しょ」
『あ、ホントだ。よく見ないと気付かないけど……』
「ここで、【ファイル(F)】の F にアンダーバーが付いてるから、 F を押
します」
『 Alt キーなしでいいわけね。お、ファイルのポップアップメニューが出
た』
「で、ここで【開く(O)】だから」
『 O を押すと。お、〈ファイルを開く〉ダイアログが出た!』
「というわけで、 & の指定をしておけばキーボードだけで操作できるって
わけ」
『キーボードだけねぇ。マウスない状況なんて考えられないけど』
「ユーザーによってはそういう場合もあるし、これは慣れると早いよ」
『確かにキーみっつでできるね』
「それに、サーバー管理とかだとマウスがなかったりすることもあって
ね……」
『え?』
「ううん、独り言。話を戻して【 \tCtrl+O 】のところだけど、まず最初の
\t は、タブを入れるって意味」
『あー、 TRACE() に使う \n と同じね』
「そゆこと。これがあるから、この Ctrl+O のところは縦に並んでくれるん
です」
『確かに並んでる』
「で、 Ctrl+O は、ショートカットキー。試しに、メニュー開かない状態で
Ctrl キー押しながら O を押すと」
『〈ファイルを開く〉ダイアログが出た』
「ただ、これは書いてるだけ。たとえばこれを Ctrl+A にしても」
『〈ファイルを開く〉ダイアログが……開かない〜。 Ctrl+O で開くのは
変わらないね』
「つまり、ここでは表示だけ。実際のショートカットキーの指定は
【アクセラレーター】ってリソースでします」
『そいえば、前回そんなこと言ってたね』
「 & の方は表示も指定も両方しちゃうけど、 Ctrl の方はただの表示って
こどで。あ、 & の付いたキーのことを、正式名称は【ニーモニック】って
言います」
『ニーモニック……なんか難しい言葉ね』
「そうかも。 mnemonics って書くんだけど読めないし、あまり使われてな
いし、ニーモニックって他のプログラミング用語にも使われてるからあまり
使わない方がいいかもね」
『あらま。で、 ID とキャプションの下にいっぱい項目あるけど』
「これはひとつひとつ見ていく……けど、この【開く】の項目を変えたくな
いから、新しくメニューアイテムを作ろうか。【ファイル】ポップアップメ
ニューの一番下に、点線の四角があるでしょ」
『ほい。お、 ID とキャプションが空だ』
「ここに書き込めば、新しいメニューアイテムをここに追加できます」
『【開く】の下とかに入れたい時は?』
「ここで作って上にドラッグすれば」
『あ、上下はドラッグ&ドロップで変えられるのね』
「じゃ、各項目について。【セパレータ】は、【名前を付けて保存】や
【プリンタの設定】の下にある横線のこと」
『へー、これもメニューアイテムのひとつなんだ』
「セパレータは選ぶことができないから ID は指定する必要なし、だから淡
色表示になります」
『【ポップアップ】は……あ、オンにしたら右になんか出た』
「ポップアップは、選ぶとさらにポップアップメニューが表示されるように
なります」
『あー、メニューバーのと同じってことね』
「そゆこと。【選択不可】はあとで出てくる【淡色表示】と同じだからパ
ス」
『同じのがふたつもあるの?』
「ホントは違うはずなんだけど……どうも違わないみたいだから今はパス」
『次の【ブレーク】は……おー、メニューが途中で折り返されるんだ。
って、今はメニューの最後に下向き矢印がふたつとかあるの多いよね』
「あれは特注品」
『えー?』
「ちなみに、アイコン付きのメニューも特注品」
『えー!!?? そなの!? スタートメニューも、 IE のメニューも、ど
れも特注品、ってことは普通に使えないの!?』
「使えないんだよねー、それが、残念ながら」
『そうなのね……あ、そうそう、【ブレーク】の【列】と【バー】ってどう
違うの?』
「【バー】だと間に縦のセパレータが入る、ってだけ」
『あらホント。【チェック】は、最初にチェックが付くのね』
「このチェック、メニューで選んでも消えないから」
『あらホント』
「これは API でチェックを付けたり取ったりできるから。【淡色表示】は
さっきの【選択不可】と同じので、グレー化して選べなくなります」
『おー。でも、場合によってって感じにグレー化されるのってあるよね。
ってことはこれも API で?』
「変えられるから。【ヘルプ】はヘルプを表示できるっていうのだからここ
ではパス」
『最後にプロンプト……なんか長ったらしい文章が書いてあるけど』
「これは実際に試すと分かりやすいかも。実行してそれぞれのメニューアイ
テムを選ぶと、ステータスバーに」
『おおっ、この文章が出るんだ!』
「これはあると分かりやすいかもね」
『最後の【拡張スタイル】ページの【右から左へ順に整列】……ってしても
ならないけど』
「これは、アラビア語とかの、右から文字を書く言語にウィンドウズの設定
がなってるときだけ」
『あー、あの紅の豚のね』
「うん、まぁ、そう……」
『と、これで全部?』
「あ、あと簡単にひとつだけ。メニューバーのアイテムのプロパティを表示
して」
『ほい。あ、他のアイテムと変わんない……それに【ポップアップ】がオン
になってる。そっか、これ押すとポップアップメニューが出るわけだから』
「逆に言うと、これをオフにして、 ID にたとえば ID_FILE_OPEN を選べ
ば」
『ポップアップメニューが出ないで〈ファイルを開く〉ダイアログが出るわ
けね』
「そゆこと。その辺は、メニューバーとポップアップメニューの違いはな
いってことだね」
/*
Preview Next Story!
*/
『今日はプログラミングないから楽ねー』
「でもつまらなくない?」
『確かに、何かやってどう、って感じじゃないしー』
「じゃ、次回はプログラムでメニューを操作します」
『というわけで次回』
< Version 9.03 メニューを操作しよう! >
「につづく!」
『あ、でも簡単な操作だけでいいからね』
「冒険しないねー」
『だって楽じゃないとヤダし』