1

在我的应用程序中,我试图从 C# 调用在 c++ 中创建的对话框。我有一个本机 C++ 对话框和一个方法,可以使用Dialog.DoModal().

我所做的是,我编写了一个 CLI 包装器代码来调用将打开对话框的方法。然后我在 C# 中使用了该包装器。

当我调用该方法时,它会在 C++ 中打开对话框,但不会获得焦点。当我尝试单击对话框上的任何按钮时,第一次单击不起作用。然后它得到焦点并从那里开始正常运行。

SetActiveWindow我尝试使用和之类的东西SetForegroundWindow。我还尝试使用获取 C# Form 句柄Control.Handle并将其传递给 C++ 并将其设置为父级。我试过的东西没有用。

有任何想法吗?

C++ 代码:

void CCustomDialogDllFunc::CCustomDialogDllFunc(void)
{
    HINSTANCE hInst = LoadLibrary("CustomDialogResource.dll");
    if(hInst != NULL)
        AfxSetResourceHandle(hInst);
}

bool CCustomDialogDllFunc::DlgDisp(void)
{
    CCustomDialog Dlg;
    Dlg.DoModal();

    return false;
}

CLI 包装器:

WCustomDialogCall::WCustomDialogCall(void)
{
    dialogdllfunc = new CCustomDialogDllFunc;
}

WCustomDialogCall::DlgDisp(void)
{
    dialogdllfunc->DlgDisp();
}

C#:

void CSMethod()
{

   WCustomDialogCall nativeDialog = new WCustomDialogCall();

   nativeDialog.DlgDisp();

}
4

0 回答 0