어떠한 작업 코드 전에 화면 처리 코드를 넣어도
의도와 달리 작업이 끝난 후에 화면 갱신이 되는 경우가 있습니다.
작업이 순식간에 끝나는 경우라면 별 차이가 없지만
작업이 오래 걸리는 경우, 의도와 다른 결과를 보게 됩니다.
이것은 메세지 큐에서 대부분 메세지를 순서대로 처리하지만,
WM_PAINT는 가장 나중에 처리 되기 때문 입니다.
(화면변경 작업이 다 끝난 후에 일괄적으로 화면 갱신을 하겠다.. 뭐 이런 마소의 의도겠죠)
특히 OnInit시에 유용하게 쓰일 수 있습니다.
이 경우 메세지 큐의 메세지들을 강제로 뽑아내서
WM_PAINT를 잡아내어 처리하면 됩니다.
MSG msg;
while(1)
{
if( PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) )
{
if( msg.message == WM_PAINT )
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
break;
}
else
continue;
}
else
break;
}
또는
UpdateWindow(HWND);
함수를 호출하면, 우선적으로 화면이 갱신.
//
The UpdateWindow function updates the client area of the specified window by sending a WM_PAINT message to the window if the window's update region is not empty. The function sends a WM_PAINT message directly to the window procedure of the specified window, bypassing the application queue. If the update region is empty, no message is sent.
'C & C++ > MFC 컨트롤' 카테고리의 다른 글
[Slider] 비트맵 슬라이더 (0) | 2011.04.25 |
---|---|
[Etc] 가위, 바위, 보 게임 (0) | 2011.04.18 |
[Dialog] 제목표시줄(비작업영역)에 버튼을 만들려면?? (0) | 2011.04.18 |
[Progress] 프로그레스바 색상 바꾸기 (0) | 2011.04.18 |
[Button] 버튼에 이미지, 아이콘 적용 (0) | 2011.04.15 |
댓글