C++;从C#启动的对话框无法集中打开
在我的应用程序中,我试图调用C++中由C++创建的对话框。 我有一个本地C++对话框和一个方法来显示同一程序集中的对话框本身,使用<代码>对话框.DimoDalm()< <代码> > < /P> 我所做的是,我编写了一个CLI包装器代码来调用将打开对话框的方法。然后我在C#中使用了那个包装器C++;从C#启动的对话框无法集中打开,c#,c++,modal-dialog,C#,C++,Modal Dialog,在我的应用程序中,我试图调用C++中由C++创建的对话框。 我有一个本地C++对话框和一个方法来显示同一程序集中的对话框本身,使用对话框.DimoDalm()< > < /P> 我所做的是,我编写了一个CLI包装器代码来调用将打开对话框的方法。然后我在C#中使用了那个包装器 当我调用该方法时,它会打开C++中的对话框,但它不能得到焦点。当我尝试单击对话框上的任何按钮时,第一次单击都不起作用。然后它得到关注,并从此开始正常运行 我试过使用像SetActiveWindow和setforegroun
当我调用该方法时,它会打开C++中的对话框,但它不能得到焦点。当我尝试单击对话框上的任何按钮时,第一次单击都不起作用。然后它得到关注,并从此开始正常运行
我试过使用像SetActiveWindow
和setforegroundindow
这样的东西。我还尝试使用<代码>控件获取C语言窗体句柄。句柄并将其传递给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#:
只是一个尝试的建议:放置
AFX_管理_状态(AfxGetStaticModuleState())
在Dlg.DoModal()之前,我想您应该将表单句柄设置为对话框的所有者,而不是父对象。
void CSMethod()
{
WCustomDialogCall nativeDialog = new WCustomDialogCall();
nativeDialog.DlgDisp();
}