1

Visual Studio 2005、C++、Windows XP。

次のような関数を呼び出す単一のボタンを持つ CDialog があります。

BEGIN_MESSAGE_MAP(Foo, BaseDlg) //BaseDlg は CDialog から継承します
    ON_BN_CLICKED(IDBAR、バー)
END_MESSAGE_MAP()

[X] をクリックすると、ダイアログ ボックスが閉じます。

上記のコードを次のように変更します。

BEGIN_MESSAGE_MAP(Foo, BaseDlg) //BaseDlg は CDialog から継承します
    ON_BN_CLICKED(IDBAR、バー)
    ON_BN_CLICKED(IDBAZ、バズ)
END_MESSAGE_MAP()

ダイアログ ウィンドウが閉じなくなりました。X がクリックされるたびに、Baz() が呼び出されます。2 番目の ON_BN_CLICKED() ハンドラは、何らかの理由で通常のダイアログを閉じる動作を置き換えています。

2 つ以上のボタンが機能に割り当てられているダイアログ ボックスを閉じるにはどうすればよいですか?

4

1 に答える 1

3

リソース ファイルで IDBAR と IDBAZ に割り当てられている数値は何ですか? 考えられる説明の 1 つは、IDBAZ == IDCANCEL であり、ダイアログのキャンセル ボタンと X ボタンの両方の ID としてデフォルトで MFC に定義されています。この定数に対して独自のハンドラーを定義すると、ウィンドウを閉じるというデフォルトの動作がオーバーライドされます。これは、ダイアログをモーダルに表示している場合にのみ適用されます。モードレスの場合は、常に EndDialog() を呼び出して自分でダイアログを閉じる必要があります。

于 2009-01-12T17:32:02.083 に答える