4

いくつかのコントロール (編集、テキストなど) を備えた単純なダイアログ ボックスを作成し、GME/GME.rc/Dialog のリソース フォルダーに保存しました。

新しいクラスを作成する自動生成イベント ハンドラーを追加しました (この例では Class.cpp) 注: Class::Class(CWnd *pParent) : CDialogEx(Class::IDD, pParent) コンストラクターは空、それが関連しているかどうかはわかりませんが、そうではないと思います..

Class.cpp 内に MESSAGE_MAP COMMAND(menu_item_id, &class::member_function()) 呼び出しが自動生成されました。標準の BEGIN_MESSAGE_MAP マクロにラップされています。

ただし、メニュー項目をクリックすると、項目は灰色のままです。"enabled=true" と "gray=false" のプロパティは両方とも適切に構成されています。したがって、これはメッセージ ハンドラーが登録されていないためのエラーだと思います。

どんな助けでも大歓迎です。

4

3 に答える 3

1

ダイアログには、MFC がメニュー項目を有効にするために使用する ON_UPDATE_COMMAND_UI ハンドラーのリストを実行するためのコードが含まれていません。通常、これはたとえば CFrameWnd によって処理されます。関数を呼び出しUpdateDialogControlsてみてくださいOnInitDialog

コードが参照するハンドラーが作成されたにもかかわらず、メニュー項目の ON_UPDATE_COMMAND_UI マクロもコードにないことがわかりました。

于 2012-05-10T20:12:46.747 に答える
1

コードがなければ、助けるのはかなり難しいです。CView、CFrame、CDocument、または CWinApp 派生クラスのいずれかに、メニュー ID のメッセージ ハンドラーを配置してもよろしいですか? ダイアログ クラスにメニュー ハンドラを配置しても、あまり効果がありません。

于 2012-05-10T16:56:39.103 に答える
0

通常は CMainFrame である、メニューを持つウィンドウにメニュー項目ハンドラーを追加します。メッセージ マップとハンドラーを CMainFrame にコピーし、それが役立つかどうかを確認します。ここで何をしようとしているのかわかりません-メニュー項目がクリックされたときに「クラス」を表示したいと思います(投稿を編集して、この「ExampleDialog」などを呼び出す方がよいかもしれません...) ? それとも、CDialogEx から派生したクラスにメニューを追加しましたか? 最後の場合、これがマークが言及していることだと思います-「メニューをどのように表示していますか」? ダイアログに手動でメニューを追加するにはどうすればよいですか?

于 2012-05-16T15:14:31.263 に答える