2009-07-30 7 views
0

사용자 지정 CStatic 컨트롤을 vc++에 만들고 몇 가지 문제가 있습니다.CStatic 사용자 지정 컨트롤

원래는 SS_BLACKRECT 스타일의 CStatic 컨트롤을 사용하고있었습니다. 필요할 때 컨트롤 위에 이미지를 표시해야 할 때까지 상황에 좋았습니다.

컨트롤에 이미지를 실제로 그려 놓은 뒤에 모든 물류를 알아 냈지만 다른 것들을 방해하지 않고 그렇게하는 방법을 알아낼 수는 없습니다.

기본적으로 컨트롤은 SS_BLACKRECT 스타일의 대부분을 사용하는 보통 CStatic으로 작동합니다.

그러면 컨트롤 대신 이미지를 그릴 수있는 메서드를 호출 할 수 있어야합니다. 나는 GDI을 사용하여 도면을 만들고 있는데 성공하지 못하면 OnPaint() 방법과 DrawItem() 방법을 모두 시도했습니다. 나는 OnPaint()에 그림을 그릴 수 있지만베이스를 호출하면 CStatic::OnPaint() 내 이미지 위에 그림이 그려집니다.

정상적으로 그리도록 허용 할 수 있어야하지만 이미지를 맨 위에 던져 넣을 수 있어야합니다. DrawItem() 메서드에서 처리하려고했을 때 분명히 SS_BLACKRECT 스타일을 사용하여 드로잉을 그리지 않았으므로 그 컨트롤을 그리기를 기다리고 있었기 때문에 문제가있었습니다.

내가 찾고있는 것 같아요. 세 가지 중 하나입니다. 기본 OnPaint() 메서드 완료 후 GDI을 사용하여 그리는 방법. 컨트롤을 기본 SS_BLACKRECT 스타일로 그리고 나서 이미지를 OWNERDRAW 그려야합니다. 또는 도면을 모방하는 코드 SS_BLACKRECT.

마지막 것이 가장 쉽지만, 기본 DrawItem처럼 CStatic 컨트롤을 그리기 위해 필요한 모든 것을 모릅니다.

+0

해결 방법을 찾으셨습니까? – Alan

답변

1

을 시도해보십시오 호출하여 반환 된 컬러를 사용하여 복제 할 수 있어야한다 OnPaint() 처리기의 Default()

그러면 이미지를 그릴 것인지 여부에 따라 표준 CStatic 컨트롤 상단을 그릴 수 있습니다.

0

여기에 몇 가지 아이디어입니다 : CStatic::OnPaint()이 이미지 위에 그립니다

경우, 먼저 호출하고 이후에 이미지를 그리기보십시오.

그렇지 않으면, 내가 SS_BLACKRECT의 무엇을 본 적이 거의에서, 당신은 단순히 그리는 것 GetClientRect()을 통해 얻은 컨트롤의 사각형을 통과 CDC::FillSolidRect()를 호출 할 수 및 GetSysColor(COLOR_WINDOWFRAME)