首页 > 其他分享 >切换窗体或消息控制窗体的延时问题

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

时间:2023-02-17 13:23:37浏览次数:36  
标签:hRegEditWnd WM WaitForInputIdle SendMessage 切换 延时 窗体 NULL

应用场景如:

  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);

标签:hRegEditWnd,WM,WaitForInputIdle,SendMessage,切换,延时,窗体,NULL
From: https://www.cnblogs.com/zzz3265/p/17129803.html

相关文章