Docで作成した関数をDialogで使用 – プログラミング – Home

Docで作成した関数をDialogで使...
 
通知
すべてクリア

[解決済] Docで作成した関数をDialogで使用


ryo
 ryo
(@ryo)
ゲスト
結合: 24年前
投稿: 252
Topic starter  

使用環境 WINDOWS XP PRO
     MFC MDI VC++ Vr.6.0 を使用しています。
バリバリの初心者ですm(_ _)m
よろしくお願いします。

FormViewを二つ使用していて起動時に2画面立ち上がるようにしています。
その中にダイアログを貼り付けてDoc内の関数、
または取得した配列を取得したいのですが

CXXXDoc* pDoc = GetDocument();
or
CXXXDoc *pDoc = (CXXXDoc*)((CFrameWnd *)AfxGetMainWnd())->GetActiveDocument();

等を使用しても無理でした。

ご教授お願いします。


引用未解決
トピックタグ
ryo
 ryo
(@ryo)
ゲスト
結合: 24年前
投稿: 252
Topic starter  

補足
CXXXDoc* pDoc = GetDocument();
コンパイルエラー
or
CXXXDoc *pDoc = (CXXXDoc*)((CFrameWnd *)AfxGetMainWnd())->GetActiveDocument();
実行時エラー

でした。


返信引用
ひろぴー
 ひろぴー
(@ひろぴー)
ゲスト
結合: 23年前
投稿: 182
 

もっと詳しく書くとレスがつきやすいかと。
こんなコンパイルエラーでした(コピペとかで)
どのクラスのドコに記述しています。
など


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

ダイアログ内でGetDocumentしても無理でしょう。
だって、CDialogクラスにGetDocumentなんてないでしょうから。

実行時エラーではわからんのできちんとエラー内容まで書きましょう。
ところで、pDocがNULLでないかとかちゃんと調べていますか?


返信引用
ryo
 ryo
(@ryo)
ゲスト
結合: 24年前
投稿: 252
Topic starter  

すみません。
実行時エラー時、ハンドルが指定されていないと出てきます。

pDocもNUllの(0)のようです。
どのようにしてハンドルを取得すればいいのでしょうか?


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

デバッガでどこまで実行されたらそのエラーが出ているか追いかけましたか?

話を聞いているとどこでエラーが起こっているのかさえ把握できていないようですが。
提示されているコードにハンドルを指定している部分なんて有りませんよね。
それなのにハンドルがどうこうという話をされてもレスのつけようがないです。


返信引用
ryo
 ryo
(@ryo)
ゲスト
結合: 24年前
投稿: 252
Topic starter  

ハンドルされていない例外はMFC・・・.DLLにありますというエラーが出ているようです。
デバッガで追いかけて落ちてる所は理解できるのですが・・・

理由もpDocが取得できてない為だと思います。

どのようにすればDialogクラスからCXXXDoc.cpp内
の関数を使用できるのかが解りませんm(__)m


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

メンバ関数の呼び出しにインスタンス(か、そのポインタ)
が必要であることは理解されてますか?

CDocument派生クラスのインスタンスメソッドであれば、
それは普通の方法では無理です。
ダイアログはドキュメントを知りませんので、

そのダイアログを出したものが、あらかじめドキュメントを取得して
ダイアログに教えてあげでおくようにするとよいでしょう。


返信引用
ryo
 ryo
(@ryo)
ゲスト
結合: 24年前
投稿: 252
Topic starter  

C++初心者なもんですみません。Java開発は携わったことあるので。
どう発言すればいいのか微妙だったんですけど・・・
Docのインスタンスを生成をしようとしていたのです。

調べていてインスタンスの生成はできないというところまで調べたのですが・・・
>それは普通の方法では無理です。
の普通でない方法が解りません。

FormViewでドキュメントを取得してどのようにDialogに教えてあげればよろしいのでしょ
うか?

言葉が足りなかったようで、手間かけさせてすみませんでしたm(__)m


返信引用
ひろぴー
 ひろぴー
(@ひろぴー)
ゲスト
結合: 23年前
投稿: 182
 

>FormViewでドキュメントを取得してどのようにDialogに教えてあげればよろしいのでしょ
>うか?
ポインタをそのまま教える。


返信引用
ひろぴー
 ひろぴー
(@ひろぴー)
ゲスト
結合: 23年前
投稿: 182
 

表現がちょっと変だ(ToT)
ポインタをそのまま渡す?


返信引用
ryo
 ryo
(@ryo)
ゲスト
結合: 24年前
投稿: 252
Topic starter  

すみません。
渡すが正しいですね・・・m(__)m


返信引用
Tonny
 Tonny
(@Tonny)
ゲスト
結合: 23年前
投稿: 32
 

>CXXXDoc *pDoc = (CXXXDoc*)((CFrameWnd *)AfxGetMainWnd())->GetActiveDocument();
SDIの場合はこれでいいのですが、MDIの場合、子フレームなる物が存在しています。

CXXXDoc *pDoc = (CXXXDoc*)(
((CFrameWnd*)AfxGetMainWnd())->GetActiveFrame()->GetActiveDocument());
^^^^^^^^^^^^^^^^^^^^
↑これが必要です。


返信引用
ryo
 ryo
(@ryo)
ゲスト
結合: 24年前
投稿: 252
Topic starter  

Tonnyさん、皆様ご教授ありがとうございました。

>CXXXDoc *pDoc = (CXXXDoc*)(
> ((CFrameWnd*)AfxGetMainWnd())->GetActiveFrame()->GetActiveDocument());

これで解決しました。m(__)m


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました