ウィンドウにメニューを付けるには、
- リソースとしてメニューを定義し、それを読み込む静的な方法
- CreateMenuでメニューを作成し、それをウィンドウにセットする動的な方法
の2種類がある・・・。
今回はリソースとしてメニューを定義する方法を使って、ウィンドウにメニューを付ける・・・。
いつもどおりプロジェクトを作成したら、
ソリューションエクスプローラのMENUプロジェクトで右クリックで、
[追加]-[リソース]を選ぶ・・・。
[Menu]で[新規作成]・・・。
メニューの編集画面が出る・・・。
ただ、今回はこの画面で編集した自動生成されたスクリプトを使わず、必要な部分だけを書いたスクリプトで上書きする・・・。
.vcproj拡張子のファイルと同じ階層に、.rc拡張子のファイルがあるとおもうが、これがリソーススクリプト・・・。
これをテキストエディタなどで開いて、
こういう記述内容にして、上書き保存する・・・。
IDR_MAINMENUはMENU(メニュー)であるという意味・・・。
1つ目の項目"Item1(&A)"は、POPUP(ポップアップメニュー)であり、それを押すと、
その下に、MENUITEM(メニュー項目)の、"Item1-1(&B)", "Item1-2(&C)", "Item1-3(&D)"が並べて表示されるというスタイル・・・。
同様にItem2, Item3も押すと、メニュー項目が出るようになっている・・・。
"&A"とか"&B"はショートカットキーで、[Alt]+その文字キーで選択できるようにするもの・・・。
IDR_MAINMENUや、ID_ITEM_1_1は、リソースIDと呼ばれるもので、個々のリソースを識別するもの・・・。
メニューの場合、項目ごとにこれが割り当てられる・・・。
(ただし、項目がサブメニューをもつ場合は例外・・・。)
MENU.rcと一緒に生成されたresource.hも、
と上書きする・・・。
リソースIDはこのようにひとつひとつの数字と対応していて、これを、
MENU.rcは先頭でインクルードしている・・・。
結局、個々のリソースはこれらの数値で管理されているということ・・・。
これらのメニューリソースをウィンドウと紐付けるには、
resource.hをインクルードし、
ウィンドウクラスwcのlpszMenuNameで、IDR_MAINMENUをMAKEINTRESOURCEマクロ経由で指定する・・・。
そうすると、
メニューが表示された・・・。
ただ、押しても何も起きない・・・。処理を定義してないからねえ・・・。
Sample/MENU.cpp at master · bg1bgst333/Sample · GitHub
Sample/resource.h at master · bg1bgst333/Sample · GitHub
Sample/MENU.rc at master · bg1bgst333/Sample · GitHub