MENU

ウィンドウにメニューを付けるには、

  1. リソースとしてメニューを定義し、それを読み込む静的な方法
  2. CreateMenuでメニューを作成し、それをウィンドウにセットする動的な方法

の2種類がある・・・。

今回はリソースとしてメニューを定義する方法を使って、ウィンドウにメニューを付ける・・・。

いつもどおりプロジェクトを作成したら、

f:id:BG1:20150521104925j:plain

ソリューションエクスプローラのMENUプロジェクトで右クリックで、
[追加]-[リソース]を選ぶ・・・。

f:id:BG1:20150521105139p:plain

[Menu]で[新規作成]・・・。

f:id:BG1:20150521105324j:plain

メニューの編集画面が出る・・・。
ただ、今回はこの画面で編集した自動生成されたスクリプトを使わず、必要な部分だけを書いたスクリプトで上書きする・・・。

f:id:BG1:20150521105951j:plain

.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マクロ経由で指定する・・・。

そうすると、

f:id:BG1:20150521114202j:plain

メニューが表示された・・・。
ただ、押しても何も起きない・・・。処理を定義してないからねえ・・・。

Sample/MENU.cpp at master · bg1bgst333/Sample · GitHub
Sample/resource.h at master · bg1bgst333/Sample · GitHub
Sample/MENU.rc at master · bg1bgst333/Sample · GitHub