VS2008を使用するドキュメント/ビュープロジェクトでは、メニュー項目の追加と削除がメニューのUIに反映されるため、MFCMenuBarはプロジェクトから正しいMENUリソース(IDR_MAINFRAME)をロードしているようです。それは、アクセラレータをデフォルトのメニュー項目(例えば、Ctrl + OをOpen ...の項目)に追加します。ただし、アクセラレータテーブル(IDR_MAINFRAME)はメニューに接続されていないようです。デフォルトのCtrl + OをOpen ...のように変更すると、Ctrl + 7のように動作しません。 Ctrl + OはOpen ...メニュー項目に追加され、Ctrl + OはまだOpen ...ハンドラを呼び出します。リソースファイルにはアクセラレータテーブルが1つしかないので、CMFCMenuBarがアクセラレータ情報を取得する場所はわかりません。CMFCMenuBarがアクセラレータテーブルを使用しないのはなぜですか?
この時点で、IDR_MAINFRAMEアクセラレータテーブルを手動で読み込んでメッセージを自分自身で翻訳することで、アクセラレータを動作させることができました。しかし、CMFCMenuBarはデフォルトアクセラレータを追加しています。
誰でもここで何が起こっているのか説明できますか? MFCMenuBarにアクセラレータテーブルを使用させ、アクセラレータを追加したり、適切なアクセラレータを追加したりしないようにするにはどうすればよいですか?
私は、最近更新されたアクセラレータテーブルを使用していないCDockablePaneで同じ問題を抱えていました。 HKCU \ Software \ \ をクリアすると問題が解決しました。同じことがCMFCMenuBarの助けになると思います。 –
これはやっかいなことです。 ResetAll()で上記のオプションが良いです。 –