应用场景如:
- ShowWindow + SetForegroundWindow, 用来切换窗体, 有时切换失败
- 对其他窗体 SendMessage WM_KEYDOWN 或其他消息控制动作, 有时逻辑异常
问题原因:
其他窗体在动作时, 会异步执行, 目前无法知道目标是否执行完成,
简单情况可以用sleep来避免, 但是无法使用在复杂情况或需要更快响应
相关的方法:
- sleep
- WM_SETREDRAW 设置关闭重绘
- ::SendMessage(hRegTreeWnd, WM_NULL, 0, 0);
- ::WaitForInputIdle(hProc, INFINITE);
推荐使用 WM_NULL 和 WaitForInputIdle
示例
if(::IsIconic(hRegEditWnd))
::ShowWindow(hRegEditWnd, SW_RESTORE);
else
::ShowWindow(hRegEditWnd, SW_SHOW);
::WaitForInputIdle(hProc, INFINITE);
::SendMessage(hRegEditWnd, WM_NULL, 0, 0);
::SetForegroundWindow(hRegEditWnd);
::WaitForInputIdle(hProc, INFINITE);
::SendMessage(hRegEditWnd, WM_NULL, 0, 0);
::SendMessage(hRegTreeWnd, WM_CHAR, vkChar, 0);
::SendMessage(hRegTreeWnd, WM_NULL, 0, 0);
::WaitForInputIdle(hProc, INFINITE);
标签:hRegEditWnd,WM,WaitForInputIdle,SendMessage,切换,延时,窗体,NULL
From: https://www.cnblogs.com/zzz3265/p/17129803.html