• ベストアンサー

メニューリソースのオプションのGRAYEDについて

IDR_MENU1 MENU { POPUP "ファイル(&F)" { MENUITEM "新規作成(&N)",IDM_NEW MENUITEM "終了(&X)",IDM_EXIT,GRAYED } POPUP "ヘルプ(&H)",GRAYED { MENUITEM "バージョン情報(&V)",IDM_VERSION } } このコードでGRAYDに指定しているコマンド"終了"の文字が灰色にならず、選択可能になります。どうしたらGRAYEDの設定が反映されるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

MFCでコーディングなさっているのでしょうか? # 開発環境のバージョンやエディッション MFCなどクラスライブラリーのバージョンなどを明記しましょう IDM_EXITに対応するイベントハンドラをメッセージマップに登録してあるため『GRAYED』のリソース設定が生きないのだと思います ON_COMMAND( IDM_EXIT, OnExit) といった記述に ON_COMMAND_UPDATE_UI(IDM_EXIT, OnUpdateExit) を追加して このハンドラの中でメニュー項目を無効にしましょう XXXXXX::OnUpdateExit(CCmdUI *pCmdUI) {   // 無効にするなら FALSEを 有効にするならTRUEを与えましょう   pCmdUI->Enable( FLASE ); } といった具合です

oeilvert
質問者

お礼

お返事ありがとうございます。 開発環境はVisualStudio2008でMFC9.0のバージョンで開発しています。 すべてのMEMUITEM項目である IDM_NEW IDM_EXIT IDM_VERSION はメッセージマップに登録しています。 これらの項目にはGRAYEDを設定しても効果がありません。 逆にPOPUP項目である ファイル ヘルプ にはGRAYEDの効果が現れます。 もしかして、メッセージマップに登録済みの項目にはGRAYEDは適用でぎず、その他紹介いただいた方法で類似する機能をつくるべきなのでしょうか?

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

メニューの項目とツールバーのボタンを同期して制御するという仕組みを使っているのでCCmdUIクラスを使ってやるほうがいいように思います ファイル、ヘルプなど メニューの親項目自体をツールバーに設定できないため『GRAYED』が有効になるように思います # 根拠はありませんが ・・・

oeilvert
質問者

お礼

お返事ありがとうございます。 メニューリソース自体は比較的単純に設定しておいて、メニューのオプション部分はCCmdUIクラスで実現したほうがよさそうですね。

関連するQ&A