我正在开发一个应用程序,它恰好是我也在开发的安装程序的引导程序。该应用程序进行了几次 MSI 调用以获取我需要的信息,以便将作为我的应用程序主窗口的向导组合在一起,这会导致在收集信息时打开一个进度窗口,然后在完成后消失。然后设置并启动向导。我的问题是向导(从 CPropertySheet 派生)不想在我不添加一些调用的情况下出现在最前面并成为活动应用程序。
我已经在我的 OnInitDialog() 方法中使用以下代码解决了将其置于最前面的问题:
SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); // force window to top
SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); // lose the topmost status that the previous line gave us
我的问题是我还没有弄清楚如何让窗口自动激活(即,让自己成为焦点)。SetFocus() 在这种情况下不起作用。我需要一些东西来强制窗口到 Z 顺序的顶部并激活它,最好是在尽可能少的调用中。
我的猜测是 MSI 调用在开始时打开的进度窗口导致主窗口出错,但我无法阻止该窗口出现。此外,隐藏它是没有意义的,因为它让用户在主窗口到达之前知道发生了什么。