2012-05-10 20 views
4
私はいくつかのコントロール(編集、テキストなど)で簡単なダイアログボックスを作成し、

MFCメニュー項目正しく起動しませんモーダルダイアログ

GME/GME.rc /ダイアログ内のリソースフォルダに にそれを保存した

新しいクラス(この例ではClass.cpp )を作成した自動生成イベントハンドラを追加しました。注意:Class :: Class(CWnd * pParent): CDialogEx(Class :: IDD、pParent )コンストラクタはMESSAGE_MAPコマンドがあります(menu_item_id、&クラス:: member_function())..私はそれが 関連するかどうか分からないが、私はそれがあるとは思わない、

空である Class.cpp内の呼び出しは自動生成されました。それは 標準のBEGIN_MESSAGE_MAPマクロに包まれています。

ただし、メニュー項目をクリックすると、項目はグレーのままです。 「enabled = true」および「gray = false」のプロパティは、どちらも正しく に設定されています。だから、私はこれがエラーメッセージハンドラisnt 登録されているためですと仮定します。

ご協力いただければ幸いです。

+0

メニューをどのように表示していますか? –

+0

IDR_MAINFRAMEメニューから、メニューを追加し、「イベントハンドラを追加」を右クリックして、COMMANDメッセージタイプを処理するCUserInformationクラスを選択しました。 http://pastie.org/3891015 < - ヘッダーファイル。 http://pastie.org/3891019 < - インプリメンテーションファイル – Andrew

+0

メニューを生成するためのコードはまだ表示されていませんが、ダイアログに追加する方法はわかりません。 –

答えて

1

コードなしでは、それは非常に難しいです。メニューIDのメッセージハンドラをCView、CFrame、CDocument、またはCWinAppの派生クラスに置いてもよろしいですか?ダイアログ・クラスにメニュー・ハンドラを置くと、それほどうまく行かないでしょう。

+0

ダング!ベースラインはCDialogExでした。理想的には、MESSAGE_MAP/ON_COMMANDはどこに行きますか?メイン:: InitInstance()? – Andrew

+2

メニュー項目の選択後にモーダルダイアログを実行することを目標にしている場合は、CView派生クラスまたはCMainFrameクラスにON_COMMANDハンドラを追加します。ハンドラ内で、スタック上のCDialog派生クラスのインスタンスを宣言し、DoModal()を呼び出します。 –

1

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

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

0

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

関連する問題