none
メニュー項目が勝手にdisableになる RRS feed

  • 質問

  • MFCで開発しています。

    メニューエディタで追加した項目が、プロパティで
      Enabled=True
    としてあるにもかかわらず、実行するとdisableになってしまいます。

    どのようにしたら回避できますでしょうか?
    2009年9月25日 6:22

回答

  • そのコマンドのハンドラを作成してください。

    メニューリソースから「イベントハンドラの追加...」のようなメニューを実行できるはずです。
    • 回答としてマーク tame-o 2009年9月25日 7:33
    2009年9月25日 6:48

すべての返信

  • そのコマンドのハンドラを作成してください。

    メニューリソースから「イベントハンドラの追加...」のようなメニューを実行できるはずです。
    • 回答としてマーク tame-o 2009年9月25日 7:33
    2009年9月25日 6:48
  • イベントハンドラを追加したのですが、相変わらずdisableのままでした。残念です。
    2009年9月25日 6:59
  • イベントハンドラを、CScrollViewの派生クラスではなく、
    CFrameWndの派生クラスに設定したらうまくいきました。
    そういうものなのでしょうか。

    助言ありがとうございました。
    2009年9月25日 7:32
  • イベントハンドラを、CScrollViewの派生クラスではなく、
    CFrameWndの派生クラスに設定したらうまくいきました。
    そういうものなのでしょうか。
    MFCのフレームワークは、
    http://msdn.microsoft.com/ja-jp/library/shfzay75(VS.80).aspx に書かれているような順に、
    コマンドのハンドラがあるかどうかを調べます。
    コマンドのハンドラが見つからなければ、メニューやボタンなどのU/Iを淡色表示します。

    CScrollViewの派生クラスにハンドラを作成してもdisableのままだったとすれば、
    そのCScrollViewの派生クラスが何らかの理由でコマンドルーティングから漏れているのだと思います。
    たとえば、そのCScrollView派生クラスが、アクティブビューでないなど。

    また、メニューやツールバーなどのEnable/Disableは、
    通常、ON_UPDATE_COMMAND_UI()を使った仕組みで制御します。
    詳しくは、http://msdn.microsoft.com/ja-jp/library/s7y0c550(VS.80).aspx を参照ください。
    2009年9月25日 9:00