模式对话框不能作为最上面的窗口打开 我们公司正在销售两种不同的应用程序,它们都用C++编写,与MFC 8

模式对话框不能作为最上面的窗口打开 我们公司正在销售两种不同的应用程序,它们都用C++编写,与MFC 8 ,c++,windows,mfc,C++,Windows,Mfc,在这两个应用程序中,我们创建并打开如下模式对话框: dlg_options myOptions; myOptions. DoModal(); 近10年来,我们一直是这样做的。 我们有大约一百个客户,他们有各种各样的Windows版本(XP到8.1),而且这种方式一直运行良好 几周前,我们有一个客户,应用程序的模式对话框没有作为最上面的窗口打开。他们呆在后台,你必须手动激活他们才能把他们带到前台 我无法解决这个问题,但在他的机器(Win 8.1)上,客户安装了一些Windows扩展,如不同的开始

在这两个应用程序中,我们创建并打开如下模式对话框:

dlg_options myOptions;
myOptions. DoModal();
近10年来,我们一直是这样做的。 我们有大约一百个客户,他们有各种各样的Windows版本(XP到8.1),而且这种方式一直运行良好

几周前,我们有一个客户,应用程序的模式对话框没有作为最上面的窗口打开。他们呆在后台,你必须手动激活他们才能把他们带到前台

我无法解决这个问题,但在他的机器(Win 8.1)上,客户安装了一些Windows扩展,如不同的开始菜单,因此我发现了一些问题。事实上,系统是一团糟。甚至有不止一个开始菜单应用程序!重新安装Windows后,一切正常

今天,我又在不同的应用程序和不同的客户身上遇到了同样的问题。他的系统还是Windows8.1,但这次我找不到任何Windows扩展

两个系统有一个共同点。您无法使用tab+alt键在应用程序之间切换。即使我们的软件没有运行,您也无法切换。当我们的应用程序运行时,您可以使用tab+alt将模式对话框从后台带回前台。这很好,但是窗口应该从一开始就在前景中

我不知道那里发生了什么,也没有办法找到这个错误。 有没有人有类似的经历?
这是怎么回事?

您应该通过拨打以下电话:

SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);

我在这里发现了一个类似的问题:

这似乎是dialog的父级有问题。您可以尝试按以下方式声明:

CMyDlg dlg(this);

我希望这会有所帮助。

如果您的对话框没有出现在前面,您的应用程序窗口是否会在任务栏中闪烁?有一些黑客涉及调用
SetWindowPos
,这可能会强制进行相对定位,但如果应用程序当时在后台,则最终可能会抓住焦点,从而骚扰用户。