본문 바로가기
C & C++/MFC 컨트롤

[MFC] 화면 갱신 우선처리

by izen8 2011. 4. 18.
반응형

어떠한 작업 코드 전에 화면 처리 코드를 넣어도

의도와 달리 작업이 끝난 후에 화면 갱신이 되는 경우가 있습니다.

 

작업이 순식간에 끝나는 경우라면 별 차이가 없지만

작업이 오래 걸리는 경우, 의도와 다른 결과를 보게 됩니다.

 

이것은 메세지 큐에서 대부분 메세지를 순서대로 처리하지만,

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.


반응형

댓글