MFCの既存のプログラムからC++/CLIのフォームを呼び出しを試してみました。
逆向きはありそうな話ですが、既存のアプリにプラグインするというか、DLLで拡張できないか試してみました。
フォームを表示する際に、ウィンドウハンドルの扱いで悩んだものの、IWin32Windowの実装クラスで渡せばOKのようです。
実装クラスは、NativWindowクラスを使ったんだけど、他に適当なのあるのかな?
さくっと書くと、こんな感じ。
extern “C” int WINAPI CallingFromMFC(HWND hWnd)
{
bool ret = true;
// Form の新しいインスタンスを生成する
CLITest::MyForm^ myForm
= gcnew CLITest::MyForm();
= gcnew CLITest::MyForm();
IntPtr
managedHWND( hWnd );
managedHWND( hWnd );
NativeWindow^
parentWindow = NativeWindow::FromHandle(managedHWND);
parentWindow = NativeWindow::FromHandle(managedHWND);
// Formを表示
myForm->ShowDialog(parentWindow);
// Formを削除
delete myForm;
return ret; // 成功
}
しかし、CLIの書き方って、なれないと落ち着かないなぁ。
2013/10/4 追記
親ウィンドウのハンドル省略したらどうなる、って思ってやってみたら同じ動き。指定しなくてもOKなのか?