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

应用场景如:

  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 @   Yofoo  阅读(40)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示