8

新しいダイアログとそのコントロールを既存のリソース ファイルに定義しました。このダイアログから生成されるイベントを処理する新しいファイルも作成しました。しかし、これら2つを接続する方法がわかりません。

enum { IDD=IDD_NEW_DIALOG };この2つを結び付けるために必要なステートメントはすべてですか? それとも、別のステートメントを追加する必要がありますか?

4

3 に答える 3

14

これが MFC で通常行われる方法は、リソース エディターでダイアログ テンプレートを定義することです (これまでに行ったように)。次に、C++ で CDialog からクラスを派生させ、それをダイアログ テンプレートに関連付けます (これは、あなたが行ったように聞こえます)。 -完全には明らかではありません)。

2 つを実際に関連付けるのは、CDialog コードのコンストラクターです。MFC クラス ウィザードによって自動生成されたダイアログ関連のコードを見ると、コンストラクターの実装が次のようになっていることがわかります。

CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/) : CDialog(CMyDlg::IDD, pParent)

ここで、CMyDlg::IDD は、新しいダイアログ テンプレートの識別子の値を持つ列挙として定義されます。列挙型の宣言ではなく、これがすべてを実現します。あなたはそれを変更することができます

CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/) : CDialog(IDD_NEW_DIALOG, pParent)

ダイアログ ID がコンストラクターに渡されるだけなので、引き続き機能します (IDD_NEW_DIALOG がリソース内のダイアログのテンプレート ID であると仮定します)。

一般に、MFC は最初の外観にもかかわらず、コンパイラ マジックのビットによって Windows にバインドされないことを常に覚えておく価値があります。これはすべて、C++ といくつかのマクロで行われます。

編集: DIALOGEX と DIALOG は、Windows が理解するわずかに異なるダイアログ リソース形式を宣言します。前者は後者よりも新しいです。ただし、どちらも少なくとも Windows 95 から存在しているため、それほど大きな違いはありません。

于 2008-12-08T10:29:17.687 に答える
1

DoModal()ダイアログ クラス ( 、またはCreate非モーダル ダイアログの場合)を使用してダイアログを作成する場合に必要なのは、これだけです。これが通常の方法です。

もちろん、CDialog から継承し、メッセージ マップを追加して、メッセージを ewvent ハンドラー関数にルーティングする必要があります。

于 2008-12-08T06:43:15.663 に答える
0

クラス ウィザードを使用して、新しく作成されたダイアログのクラスを作成します。ctrl+w は、UI リソース ビューからのショートカット キーです。

于 2008-12-08T06:43:12.653 に答える