使用環境 WINDOWS XP PRO
MFC MDI VC++ Vr.6.0 を使用しています。
バリバリの初心者ですm(_ _)m
よろしくお願いします。
FormViewを二つ使用していて起動時に2画面立ち上がるようにしています。
その中にダイアログを貼り付けてDoc内の関数、
または取得した配列を取得したいのですが
CXXXDoc* pDoc = GetDocument();
or
CXXXDoc *pDoc = (CXXXDoc*)((CFrameWnd *)AfxGetMainWnd())->GetActiveDocument();
等を使用しても無理でした。
ご教授お願いします。
補足
CXXXDoc* pDoc = GetDocument();
コンパイルエラー
or
CXXXDoc *pDoc = (CXXXDoc*)((CFrameWnd *)AfxGetMainWnd())->GetActiveDocument();
実行時エラー
でした。
もっと詳しく書くとレスがつきやすいかと。
こんなコンパイルエラーでした(コピペとかで)
どのクラスのドコに記述しています。
など
ダイアログ内でGetDocumentしても無理でしょう。
だって、CDialogクラスにGetDocumentなんてないでしょうから。
実行時エラーではわからんのできちんとエラー内容まで書きましょう。
ところで、pDocがNULLでないかとかちゃんと調べていますか?
すみません。
実行時エラー時、ハンドルが指定されていないと出てきます。
pDocもNUllの(0)のようです。
どのようにしてハンドルを取得すればいいのでしょうか?
デバッガでどこまで実行されたらそのエラーが出ているか追いかけましたか?
話を聞いているとどこでエラーが起こっているのかさえ把握できていないようですが。
提示されているコードにハンドルを指定している部分なんて有りませんよね。
それなのにハンドルがどうこうという話をされてもレスのつけようがないです。
ハンドルされていない例外はMFC・・・.DLLにありますというエラーが出ているようです。
デバッガで追いかけて落ちてる所は理解できるのですが・・・
理由もpDocが取得できてない為だと思います。
どのようにすればDialogクラスからCXXXDoc.cpp内
の関数を使用できるのかが解りませんm(__)m
メンバ関数の呼び出しにインスタンス(か、そのポインタ)
が必要であることは理解されてますか?
CDocument派生クラスのインスタンスメソッドであれば、
それは普通の方法では無理です。
ダイアログはドキュメントを知りませんので、
そのダイアログを出したものが、あらかじめドキュメントを取得して
ダイアログに教えてあげでおくようにするとよいでしょう。
C++初心者なもんですみません。Java開発は携わったことあるので。
どう発言すればいいのか微妙だったんですけど・・・
Docのインスタンスを生成をしようとしていたのです。
調べていてインスタンスの生成はできないというところまで調べたのですが・・・
>それは普通の方法では無理です。
の普通でない方法が解りません。
FormViewでドキュメントを取得してどのようにDialogに教えてあげればよろしいのでしょ
うか?
言葉が足りなかったようで、手間かけさせてすみませんでしたm(__)m
>FormViewでドキュメントを取得してどのようにDialogに教えてあげればよろしいのでしょ
>うか?
ポインタをそのまま教える。
表現がちょっと変だ(ToT)
ポインタをそのまま渡す?
すみません。
渡すが正しいですね・・・m(__)m
>CXXXDoc *pDoc = (CXXXDoc*)((CFrameWnd *)AfxGetMainWnd())->GetActiveDocument();
SDIの場合はこれでいいのですが、MDIの場合、子フレームなる物が存在しています。
CXXXDoc *pDoc = (CXXXDoc*)(
((CFrameWnd*)AfxGetMainWnd())->GetActiveFrame()->GetActiveDocument());
^^^^^^^^^^^^^^^^^^^^
↑これが必要です。
Tonnyさん、皆様ご教授ありがとうございました。
>CXXXDoc *pDoc = (CXXXDoc*)(
> ((CFrameWnd*)AfxGetMainWnd())->GetActiveFrame()->GetActiveDocument());
これで解決しました。m(__)m