2009-05-11 4 views
1

사용자 지정 드로잉을 수행하기 위해 WM_PAINT를 재정의하려고하는 CTabCtrl 하위 클래스가 있습니다. 유일한 문제는 선택한 탭을 변경할 때 새 코드가 그 위에 칠하기 전에 이전 페인트 코드가 지워지지 않은 대화 상자에 아티팩트가 남아 있다는 것입니다. 표준 탭 컨트롤에서는 선택한 탭이 선택되지 않은 탭보다 2 픽셀 더 크게 나타나므로 선택에서 선택되지 않은 상태로 변경하면 이전 페인트 아티팩트가 남습니다.하위 컨트롤의 투명 영역을 페인트하는 방법은 무엇입니까?

이 영역을 "다시 칠하는"가장 좋은 방법은 무엇입니까? 나는 부모 컨트롤의 DC 및 BitBlt'ing 그 자식의 DC에 가져 가려고했지만 부모 DC 이미이 컨트롤의 이미지가 포함되어 있기 때문에 작동하지 않습니다.

답변

2

WM_ERASEBACKGROUND 메시지도 무시합니까? 당신은 아마 그렇게하고 컨트롤의 영역을 지워야합니다.

모든 그리기 논리를 바꾸려하지 않으려면 DrawThemeParentBackground을 사용하여 배경을 그리십시오 (XP 이상).

+0

메시지를 처리하고 WM_PAINT에서 모든 도면을 수행하려면 FALSE를 반환합니다. 나는 지금 그 기능을 시도 할 것이다 ... –

+0

그것은 아름답게 작동했다 - 래리 감사합니다. –

관련 문제