Я пишу приложение Win32.Я сам реализовал цикл сообщений следующим образом:
bool programcontinue = true;
while(programcontinue)
{
while (PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
IdleProcess();
}
В моем приложении есть окно с изменяемым размером.Обычно IdleProcess () вызывается несколько раз в секунду.Когда пользователь захватывает угол или край окна с изменяемым размером, IdleProcess () больше не вызывается, пока пользователь не отпустит кнопку мыши.
Что здесь происходит?
Я попытался обменятьсявнутреннее время с if, но это не меняет поведение.Кажется, что когда начинается изменение размера, обработчик этого сообщения не возвращается, пока изменение размера не будет выполнено?
Есть ли способ изменить это и вызвать IdleProcess () во время изменения размера несколько раз в секунду?
Спасибо, Марк
РЕДАКТИРОВАТЬ:
Что я имею в виду, если заменить внутреннее время на if, если:
bool programcontinue = true;
while(programcontinue)
{
if (PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE)) // <<<<
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
IdleProcess();
}
Мой процесс Proc немного длинен, нополучить такое же поведение с небольшим тестовым приложением.Это идентично wndproc, который создает Мастер проекта VS:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}