切换窗体或消息控制窗体的延时问题
应用场景如:
- 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);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话