2010-11-23 2 views
-2

그냥 클라이언트 영역의 일부가 아닌 배경을 다시 그려야합니다.클라이언트 영역의 픽셀이 아닌 창 배경을 무효화하는 방법은 무엇입니까?

+0

태그뿐만 아니라 질문 컨텍스트에서 세부 정보를 지정해야합니다. 배경 윈도우와 전경 창이 있다고 가정하고, 배경이 다시 그려 지도록하지만 전경은 그렇지 않게하려고합니다. – CashCow

+0

아니요, 두 개의 창이 아닙니다. win32의 모든 창에는 배경 (배경 브러시/wm_ereasebackground)과 클라이언트 영역이 있습니다. – lovespring

답변

1

수 없습니다. 배경은 창 자식 영역에 그려집니다. 창에서 자식 컨트롤을 사용하여 클라이언트 영역에 객체를 그릴 경우 WS_CLIPCHILDREN 스타일을 사용하여 부모 창의 배경 페인팅이 자식을 과도하게 페인트하지 않도록 할 수 있습니다.

부모 창에 관련 영역을 페인하면되지만 InvalidateRect 유형 호출을 사용하면 겹친 하위 창을 관계없이 다시 칠할 수 있습니다.

0

WM_ERASEBKGND으로 시도해보십시오.

예 : 당신이 말하는 "는 클라이언트가 아닌의 픽셀"영역, 난 당신이 비 클라이언트 영역을 무효화한다고 가정

HDC hDC = GetDCEx(hWnd, NULL, DCX_CLIPCHILDREN | DCX_CACHE); 
SendMessage(WM_ERASEBKGND, (WPARAM)hDC, 0); 
+0

메시지를 보내면 지금 다시 칠할 것입니다. 어떻게 그걸 지금 무효화 할 수 있습니까? – lovespring

+0

양식의 전체 또는 사각형을 무효화 할 수 있습니다. 양식의 배경 만 무효화하는 방법을 알지 못합니다. –

0

? 그렇다면 SWP_NOMOVE | SWP_NOSIZE | SWP_DRAWFRAME 플래그와 함께 SetWindowPos() 함수를 사용해보십시오.

관련 문제