0

OnFileNew()関数 (theAppオブジェクトによって処理される) が呼び出されたときにダイアログが呼び出される MDI アプリケーションがあります。このダイアログを使用すると、関数が呼び出さCChildFrameれたときに作成されるオブジェクトに渡す必要があるいくつかの変数に値を設定できます。->CreateNewChild()

関数CChildFrameによって作成されたオブジェクトにこれらの変数を渡すにはどうすればよいですか?->CreateNewChild()

編集:私が得た回答に応じて、->Create()vsを使用した結果を次に示します->CreateNewChild()

リンク: CMainFrame *pFrame;-pFrame->CreateNewChild()

リンク: CChildFrame *childFrame;-childFrame->Create()

2 番目のリンクで説明されている関数宣言を使用して、最初のリンクに表示されているタブ付きウィンドウを取得するにはどうすればよいですか?

4

1 に答える 1

1

カスタマイズされたドキュメント テンプレートを介してデータを渡すことができます。CMultiDocTemplate からクラスを派生させてデータ メンバーを追加し、派生ドキュメント テンプレート クラスへのポインターを CWinApp 派生アプリ クラスに追加します。通常の方法でドキュメント テンプレートを初期化します。ただし、完了したら、新しいドキュメント テンプレート オブジェクトをアプリ クラスのポインターに保存します。

CreateNewChild 関数では、CWinApp::OnFileNew を呼び出す代わりに、現在のフレームからデータを取得し、アプリ クラスに保存されているドキュメント テンプレートのデータ メンバーに割り当ててから、OpenDocumentFile(NULL) を呼び出すことができます。OpenDocumentFile が返されたときに、データ メンバーをクリアできます。

ドキュメント テンプレートは子フレームを作成し、作成コンテキストでドキュメント テンプレートを渡します。子フレームで作成コンテキストを取得するには、CChildFrame::OnCreateClient をオーバーライドするか、OnCreate で作成構造を読み取ります。

MDICREATESTRUCT * pMDICreateStruct=(MDICREATESTRUCT * )lpCreateStruct->lpCreateParams;
CCreateContext *pCreateContext=(CCreateContext *)pMDICreateStruct->lParam;

ドキュメント テンプレートで初期化データを渡す代わりに、新しいドキュメントにデータを渡すこともできます。基本的に、CMultiDocTemplate::OpenDocumentFile からコードをコピーし、メイン フレームのアクティブなドキュメントから初期化データを取得するコードを追加します。

于 2013-05-16T22:20:11.207 に答える