环境:c+windows7API.
我尝试反复执行:创建窗口->等待->销毁窗口->等待
第一次注册(RegisterClassEx)、创建(CreateWindowEx)、销毁、反注册窗口(UnregisterClass)均没有问题,且第一次等待时窗口正常置顶(非SetWindowPos的持续置顶)。第二次当我注册创建窗口后,窗口正常创建,但创建时却没有置于顶层。可经检查创建的窗口已经被激活拥有焦点。
我已尝试在每次创建后使用SetForegroundWindow()和SetWindowPos(HWND_TOP),均没有起作用(HWND_TOPMOST不是我想要的。我不希望置顶状态持续,但在此时HWND_TOPMOST确实可以使之置顶)。
但如果第一次创建后销毁前手动点击窗体,则第二次窗体创建就会正常置顶。
这可能是因为什么原因?谢谢。
根据你的描述,问题可能出在窗口的焦点设置上。当你创建窗口并立即销毁时,操作系统可能无法即时将焦点切换到新创建的窗口。而当你手动点击窗体时,操作系统会将焦点设置到窗体上,因此第二次创建的窗体能够正常置顶。
为了解决这个问题,你可以尝试在创建窗口后手动设置焦点到该窗口上。你可以使用 SetForegroundWindow() 或者 SetFocus() 函数来实现:
HWND hwnd = CreateWindowEx(...);
SetForegroundWindow(hwnd);
或者
HWND hwnd = CreateWindowEx(...);
SetFocus(hwnd);
这样,创建的窗口应该能够正常置顶并拥有焦点。如果仍然存在问题,还可以尝试使用 SetActiveWindow() 函数来设置活动窗口:
HWND hwnd = CreateWindowEx(...);
SetActiveWindow(hwnd);