Я попытался проверить пример «Проверка очереди сообщений» на этой странице:
http://msdn.microsoft.com/en-us/library/ms644928(VS.85).aspx
Чтобы проверить это, я создал простое окно с элементом управления и несколькими кнопками,
но это не работает так, как я ожидал. Он должен отображать строку "Some Text" в EditControl до тех пор, пока
Я нажимаю кнопку ... но проблема в том, что она отображает строку только в первый раз, а затем кажется, что она блокируется в цикле PeekMessage.
Я заметил, что после выполнения вызова DispatchMessage (& msg) он, кажется, работает правильно.
Как я могу решить ??? Обязательно ли вызывать DispatchMessage (& msg) ???
Спасибо!
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"));
}
}
}
}