切换窗体或消息控制窗体的延时问题

应用场景如:

  1. ShowWindow + SetForegroundWindow, 用来切换窗体, 有时切换失败
  2. 对其他窗体 SendMessage WM_KEYDOWN 或其他消息控制动作, 有时逻辑异常

问题原因:
其他窗体在动作时, 会异步执行, 目前无法知道目标是否执行完成,
简单情况可以用sleep来避免, 但是无法使用在复杂情况或需要更快响应

相关的方法:

  1. sleep
  2. WM_SETREDRAW 设置关闭重绘
  3. ::SendMessage(hRegTreeWnd, WM_NULL, 0, 0);
  4. ::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);
posted @ 2023-02-17 13:12  Yofoo  阅读(31)  评论(0编辑  收藏  举报