Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;从C#启动的对话框无法集中打开_C#_C++_Modal Dialog - Fatal编程技术网

C++;从C#启动的对话框无法集中打开

C++;从C#启动的对话框无法集中打开,c#,c++,modal-dialog,C#,C++,Modal Dialog,在我的应用程序中,我试图调用C++中由C++创建的对话框。 我有一个本地C++对话框和一个方法来显示同一程序集中的对话框本身,使用对话框.DimoDalm()< > < /P> 我所做的是,我编写了一个CLI包装器代码来调用将打开对话框的方法。然后我在C#中使用了那个包装器 当我调用该方法时,它会打开C++中的对话框,但它不能得到焦点。当我尝试单击对话框上的任何按钮时,第一次单击都不起作用。然后它得到关注,并从此开始正常运行 我试过使用像SetActiveWindow和setforegroun

在我的应用程序中,我试图调用C++中由C++创建的对话框。 我有一个本地C++对话框和一个方法来显示同一程序集中的对话框本身,使用<代码>对话框.DimoDalm()< <代码> > < /P> 我所做的是,我编写了一个CLI包装器代码来调用将打开对话框的方法。然后我在C#中使用了那个包装器

当我调用该方法时,它会打开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();

}