メニューはリソースの中でも最も基本的なものです。ここではVC++.netでのメニューの作り方について解説します。
ソリューション・エクスプローラを右クリックして、「追加」「新しい項目の追加」を選択します。
「新しい項目の追加」ダイアログで、テンプレート(T)に「リソースファイル(rc)」を選択します。
リソースファイルのファイル名を入力します。プロジェクト名と同じにしておくと便利です。(ここではresource01)
ファイル名の拡張子(rc)は入力する必要はありません。
リソースビューを右クリックして「リソースの追加(A)...」を選択します。
「リソースの追加」ダイアログで「Menu」を選択して「新規作成(N)」ボタンを押します。
自動的にメニューのIDがIDR_MENU1と付けられたはずです。
プロパティウィンドウで、このID項目を選択します。
IDR_MENU1をダブルクォーテーション付きの「MYMENU」に変更します。
注:もちろんダブルクォーテーション無しのIDのままでも良いのですが、後の作業が少し変わってきます。
メニューエディタでメニューを作ります。
「ファイル(&F)」をクリックしてもコマンドは実行されません。その代りサブメニューが出てきます。(「&」の次に付く文字に下線がついて「&」の文字そのものは表示されません。) このようなメニュー項目をPopup項目といいます。プロパティウィンドウの「表示」「Popup」はTrueとなっているはずです。
「ファイル」の下に「終了(&X)」というメニュー項目を作ります。これは、このコマンドが実行されるのでPopupはFalseになっているはずです。
PopupがFalseである項目にはIDを付けなくてはいけません。ここでは、わかりやすいように
「IDM_END」としました。メニュー項目には「IDM_何とか」というIDにするとわかりやすいです。
ソース・ファイルにresource.hをインクルードします。
リソース・エディタが自動的に作るヘッダファイルの名前は必ずresource.hになっています。 これには、先ほどのIDM_ENDに適当な数値が割り振られています。
WNDCLASSEX構造体のlpszMenuNameメンバに、メニュー名("MYMENU")を指定します。
もし、メニュー名をIDR_MENU1のままにしていた場合は、MAKEINTRESOURCEマクロを利用してください。
これで、ビルドするとメニュー付きのウィンドウができあがりです。しかし、メニューをクリックしても何も起りません。メニューでIDM_ENDが選択された時の処理をプログラムに書いていないからですね。
メインウィンドウのプロシージャに、メニュー項目が選択された時の処理を書き込みます。
メニューが選択されるとWM_COMMANDメッセージが来ます。この時WPARAM値の下位WORD値がメニュー項目のIDとなります。
左のプログラムでは、メニューのIDM_ENDが選択された時、自分自身にWM_CLOSEメッセージを出しています。
あとは、どんどんメニュー項目を追加していって、それぞれの処理を書き込むだけです。
別のリソースを追加する時は、リソースビューを右クリックして「リソースの追加」を選択します。 一つのプロジェクトにリソース・スクリプトは一つしか持てないことに注意してください。