MFCからC++/CLIのフォームを呼び出す

MFCの既存のプログラムからC++/CLIのフォームを呼び出しを試してみました。

逆向きはありそうな話ですが、既存のアプリにプラグインするというか、DLLで拡張できないか試してみました。

フォームを表示する際に、ウィンドウハンドルの扱いで悩んだものの、IWin32Windowの実装クラスで渡せばOKのようです。
実装クラスは、NativWindowクラスを使ったんだけど、他に適当なのあるのかな?

さくっと書くと、こんな感じ。

extern "C" int WINAPI CallingFromMFC(HWND hWnd)
{
bool ret = true;
       
        // Form の新しいインスタンスを生成する
        CLITest::MyForm^ myForm = gcnew CLITest::MyForm();
       
        IntPtr managedHWND( hWnd );

        NativeWindow^ parentWindow = NativeWindow::FromHandle(managedHWND);

        // Formを表示
        myForm->ShowDialog(parentWindow);

        // Formを削除
        delete myForm;
       
        return ret; // 成功

}

しかし、CLIの書き方って、なれないと落ち着かないなぁ。

2013/10/4 追記
親ウィンドウのハンドル省略したらどうなる、って思ってやってみたら同じ動き。指定しなくてもOKなのか?


コメント

このブログの人気の投稿

TabError: inconsistent use of tabs and spaces in indentation

マクロを含んだ.XLSがExcel2010で開けない

using ディレクティブまたはアセンブリ参照が不足しています。