在我的应用程序中,我试图从 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();
}