どのメニューが選択されたかの判別 – プログラミング – Home

どのメニューが選択されたかの判別
 
通知
すべてクリア

[解決済] どのメニューが選択されたかの判別


やま
 やま
(@やま)
ゲスト
結合: 22年前
投稿: 23
Topic starter  

VC++6.0を使用して、ダイアログベースでプログラムを作成しています。
メニューを付加しています。
メニュー項目が固定ならば、それぞれイベントでメニューごとの処理をすればいいのですが、
プログラム内部でメニュー項目を作成しますので可変となり最大は不明です。
AppendMenu関数で追加しています。その際にIDはとりあえずは重ならない値を指定しています。
メニューを選ばれたイベントまでは作成してあります。
そこの関数でどのメニュー項目できたかわかるようにするには、どのようにすればわかるのでし
ょうか?
最大を決めてそれぞれイベントを作れば楽なのでしょうが......
どうかよろしくお願いします。


引用未解決
トピックタグ
YuO
 YuO
(@YuO)
ゲスト
結合: 23年前
投稿: 252
 

CMapやstd::mapなどを使って,IDとイベントの対応表を用意しておいて,
AppendMenu時(及びDeleteMenu時)に,対応を追加(削除)していくようにします。

そうしておいてOnCommandで対応表を引くようにすることで,
動的に追加・削除に対応できると思います。
#もっとMFCらしい方法があるのかもしれませんが……。


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

IDが連続していれば、
ON_COMMAND_RANGEを使ってみると良いかも・・


返信引用
やま
 やま
(@やま)
ゲスト
結合: 22年前
投稿: 23
Topic starter  

いろいろアドバイスありがとうございます。
YuOさんのはちょっと勉強不足でわからないです。(申し訳ないです。)
また、ON_COMMAND_RANGEではIDがすでにわからないとできないと思います。
今回のはプログラムが実行してから設定ファイルを読みメニューが出来上がる仕組みです。
やはり最初に最大のIDを決めたやり方しかないのでしょうか?


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

>やはり最初に最大のIDを決めたやり方しかないのでしょうか?

いくらIDが無制限だといっても、MFCでは、メニューIDは
0x8000 から 0xDFFF ということになってますから、

ON_COMMAND_RANGE(最小値, 0xDFFF, ...)

とでもすれば、可能だと思いますが。

参照:「テクニカル ノート 20: ID 名および番号に関する規約」


返信引用
やま
 やま
(@やま)
ゲスト
結合: 22年前
投稿: 23
Topic starter  

いろいろなアドバイスありがとうございました。
確かに無制限ではないようですね。
そのあたりは制御しなければならないので、やはり最大を決めることにします。
またなにかありましたらよろしくお願いします。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました