我试图检验该“检查消息队列”在当前页例如:的PeekMessage问题
http://msdn.microsoft.com/en-us/library/ms644928(VS.85).aspx
为了测试它我创建与编辑控件和一些按钮的简单窗口,
但如我所料,它应该重复显示字符串“某些文本”在EditControl直到
我按下一个按钮,它不工作......但问题是,它显示的字符串仅在第一次然后它似乎阻止PeekMessage循环。
我注意到放置一个DispatchMessage(&味精)后来调用,它似乎工作正常。
我该如何解决?我是否必须打电话给DispatchMessage(&味精)?
谢谢!
HWND hwnd; BOOL fDone; MSG msg; fDone = FALSE; while (!fDone) { SetFocus(EditControl); SendMessage(EditControl, EM_REPLACESEL, (WPARAM)FALSE, (LPARAM)TEXT("Some Text\r\n")); while (PeekMessage(&msg, hwnd, 0, 0, PM_REMOVE)) // It blocks here, if I press any button it always sets fDone to TRUE without exiting the loop { // DispatchMessage(&msg); uncomment this and it works switch(msg.message) { case WM_LBUTTONDOWN: case WM_RBUTTONDOWN: case WM_KEYDOWN: { fDone = TRUE; SetFocus(EditControl); SendMessage(EditControl, EM_REPLACESEL, (WPARAM)FALSE, (LPARAM)TEXT("fDone set to TRUE\r\n")); } } } }
是的,它从窗口过程调用, 因此,如果我明白:每次我调用PeekMessage()我必须调用DispatchMessage()? 但PeekMessage不自动调度消息?来自MSDN的 :“调度传入的已发送消息” – Mario 2010-08-06 16:36:08
调度*已发送*消息。与*发布*消息不同。 WM_PAINT已发布,未发送。你玩的例子是*不是很棒,没有人会这样做。 – 2010-08-06 16:47:23
好的谢谢你的回复,最后一件事:为什么没有人这样做?什么是替代方案? – Mario 2010-08-06 16:55:05