2013-08-19 2 views
1

내 창에서 선택한 영역에 (이미 생성 된) 색상 표를 그리려하고 있습니다.
나는 현재 this 출처에서 배우고 있습니다. 그러나 모든 주어진 코드 예제에서 윈도우가 열리 자마자 끌기가 수행됩니다.불러올 때 그릴 때

메뉴 항목을 클릭 할 때 또는 처음부터 그렇지 않은 경우에 드로잉을 수행하려면 어떻게해야합니까?

는 편집 :

내가 그려집니다 GifPanel라는 새로운 창을 만들었습니다.

내 변수 : 내가 먼저 창을 열 때

GetClientRect(GifPanel, &r); 
InvalidateRect(GifPanel, &r, FALSE); 

:

HWND GifPanel; 
RECT r; 

GifPanelProc:

case WM_PAINT: 
    DrawFrame(GifPanel); // DrawFrame uses BeginPaint, SetPixel, EndPaint in order to draw 
    break; 

다음, 나는 클릭하여 다음을 수행하는 기능을 가지고 GifPanel에 빨간색 배경이 있음을 알 수 있습니다 (테스트하기 만하면됩니다).

위 프로세스를 실행 한 후에는 픽셀이 변경되지 않습니다. 이유를 설명해 주시겠습니까?

+0

Petzold의 저서를 읽어보십시오. –

답변

4

메시지는 WM_PAINT 메시지를받을 때마다 그려야합니다. 일반적으로 배경을 지우려면 먼저 WM_ERASEBKGND 메시지가 표시됩니다. 테이블을 그리지 않으려면 WM_PAINT 핸들러에서 테이블 드로잉을 건너 뛰도록 테스트 할 수있는 플래그를 유지해야합니다.

메뉴 처리기에서 먼저 플래그를 설정 한 다음 InvalidateRect을 사용하여 WM_PAINT 메시지를 생성하십시오.

+0

제 편집 내용을 검토해 주시겠습니까? 솔루션을 구현하는 데 약간의 문제가 있습니다. – Novak

+0

일부 디버깅을 수행하십시오. 당신이 보여준 것이 조금 밖에 보이지 않지만 그림을 그리는 코드는 보여주지 않았습니다. 이 코드가 실행됩니까? 사용하고있는 좌표를 볼 수 있도록 직사각형을 그려 보았습니까? –

관련 문제