こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

C++/CLIとMFC

よろしくお願いします。
環境はVisual C++ 2005です。

ご存知の方がいらっしゃいましたらご教授ください。
一つのプロジェクトで作成した親Formに対して、
もう一つのプロジェクトで作成した子ウィンドウをプラグインさせ、MDIを作ろうとしているのですが
[CLR]->[Windowsフォームアプリケーション]で作成したプロジェクトのFormに対して
MFCで作成した子ウィンドウをプラグインさせることは可能なのでしょうか?

C++/CLIでMDIを作る時は
MDIの親となるFormのIsMdiContainerプロパティをtrueに設定し、
MDIの子となるFormのMdiParentプロパティをMDIの親Formの
インスタンスに設定する必要があると思うのですが、
子の部分をMFCを使って作成した場合どのようにすれば
親子関係が作れるのかわからず質問させていただきました。

よろしくお願いします。

投稿日時 - 2007-11-19 22:50:59

QNo.3531891

すぐに回答ほしいです

質問者が選んだベストアンサー

無理でしょうね …
MFC周りの初期化をする部分を全て作りこまないといけないようですよ

子ウィンドウのハンドルと親ウィンドウのハンドルを使って
WinAPIのSetParentを呼んでやれば 親子関係は構築できいる思います

SetParent( MFCWnd->m_hWnd, (HWND)oForm->Handle.ToPointer() );
といった具合ですが …

CLRプロジェクトに MFCウィンドウのCPP/Hを追加して実験してみましたが MFCの初期化関数を作りこんでいないので コンパイル・リンクは通りましたが 実行すると CLRのApplicationクラスまで来る前にエラーになってしまいました

投稿日時 - 2007-11-20 02:08:46

お礼

実験までしていただきありがとうございます。
やはり難しいのですね(私も実行時にApplicationクラスに来る前にエラーが出ている状態なので)。

ご教授いただきありがとうございました。

投稿日時 - 2007-11-21 02:03:08

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

土台がぜんぜん違うものですから無理でしょうね

可能性の話をするならば MFCのレギュラーDLLに子ウィンドウを作成してエクスポートしておいてって方向かな

これでも面倒だと思いますよ
MFC側から親を探すのは CWnd経由だし CLR側から子ウインドウはForm^でしょうし …
どちらかに統一しないと面倒この上ないでしょう
リソースの管理にしても然りですよね … 同一リソースを DLL,EXE双方に持たなくてはいけなくなるし ・・・

投稿日時 - 2007-11-21 02:25:21

お礼

お礼が遅くなってしまい大変申し訳ありません。
どうにか出来ないものかと色々と・・・。
お教えいただきありがとうございました。
そうですよね。仰る通り土台が違いますものね。

これで閉めさせていただきます。
ありがとうございました。

投稿日時 - 2007-12-08 01:41:59

あなたにオススメの質問