C++ 隐藏的对话框会聚焦片刻

C++ 隐藏的对话框会聚焦片刻,c++,mfc,focus,activex,C++,Mfc,Focus,Activex,我这里有点问题 我有一个第三方ActiveX控件,可以将文件从一种类型转换为另一种类型。我想转换许多文件,所以我需要在批转换中运行它。然而,这种控制崩溃了很多(我不是在说漂亮的C++异常,它做了可爱的事情,比如访问已经释放的内存,做访问违反,你可以说出它)。 所以我的问题是: 1) 我需要将这个ActiveX控件包装在一个单独的进程中,以防止它损坏主进程的内存 2) 我可能需要调用这个过程数百次,对于快速计算机上的小文件,每秒调用5-6次 3) 我需要使这个过程完全静音,用户不能意识到一个过程被

我这里有点问题

我有一个第三方ActiveX控件,可以将文件从一种类型转换为另一种类型。我想转换许多文件,所以我需要在批转换中运行它。然而,这种控制崩溃了很多(我不是在说漂亮的C++异常,它做了可爱的事情,比如访问已经释放的内存,做访问违反,你可以说出它)。 所以我的问题是:

1) 我需要将这个ActiveX控件包装在一个单独的进程中,以防止它损坏主进程的内存

2) 我可能需要调用这个过程数百次,对于快速计算机上的小文件,每秒调用5-6次

3) 我需要使这个过程完全静音,用户不能意识到一个过程被执行了很多次

4) 但是,由于它是ActiveX控件,我还需要在托管ActiveX控件的进程中创建一个隐藏对话框

但是,当我创建隐藏对话框时,它似乎会暂时将焦点从活动窗口移开,然后将其返回。由于此过程每秒可以被调用5-6次,因此它会中断用户的键盘输入,并使当前活动窗口快速闪烁,从活动状态切换到非活动状态

我正在使用CDialog派生类来承载ActiveX控件。资源编辑器中的可见标志已关闭,以防止其显示。我通过调用CDialog::Create而不是DoModal来创建对话框


如何防止对话框夺走焦点?

很难说没有看到任何源代码,但是……如果您在CDialog派生类中覆盖OnInitDialog,请尝试在方法末尾返回FALSE而不是TRUE

只是猜测


祝你好运。

窃取焦点的可能不是对话框,而是ActiveX控件。在没有AX的对话框中尝试,看看是否显示相同的行为。CDialog::Create会创建对话框,但在调用ShowWindow/UpdateWindow之前,它不会显示对话框


此外,我还记得能够在不需要主机的情况下实例化ActiveX控件。VS可以为它创建包装器类,您可以使用它动态创建。ActiveX是否真的需要一个对话框(比如,显示输入控件)?

事实证明,问题完全在于CDialog。即使没有ActiveX或任何修改,它也在窃取焦点。因此,解决方案是创建我自己的使用DefWindowProc的窗口类,并将其用作ActiveX的父级(它确实需要父级,当我为pParent指定NULL时失败)。

谢谢,我尝试返回FALSE,但它表明子进程仍在集中。您好,感谢您的建议。ActiveX有一个包装类,它有自己的创建方法。我还试着从对话框中删除它,但对话框仍在窃取焦点。