cstatic 사용자 정의 컨트롤
-
06-07-2019 - |
문제
나는 관습을 만들려고 노력하고있다 CStatic
제어 vc++
그리고 몇 가지 문제가 있습니다.
나는 원래 a를 사용하고 있었다 CStatic
제어 SS_BLACKRECT
스타일. 이것은 주문시 제어에 대한 이미지를 표시해야 할 때까지 상황에 좋았습니다.
나는 실제로 이미지를 컨트롤에 그리는 모든 물류를 알아 냈지만 다른 것들을 방해하지 않고 어떻게하는지 알 수없는 것 같습니다.
기본적으로 나는 컨트롤이 정상으로 작동하기를 원합니다. CStatic
이랑 SS_BLACKRECT
대부분의 시간 스타일.
그런 다음 대신 컨트롤 위에 이미지를 그릴 수있는 메소드를 호출 할 수 있어야합니다. 나는 그림을 사용하고있다 GDI
그리고 둘 다 시도했습니다 OnPaint()
방법과 DrawItem()
성공하지 못한 방법. 나는 그것을 끌어들일 수있다 OnPaint()
그러나 내가 기지를 호출 할 때 CStatic::OnPaint()
내 이미지 위에 그려집니다.
나는 그것이 평범한 것처럼 그리도록 허용 할 수 있어야하지만 이미지를 맨 위에 던져 버려야합니다. 내가 그것을 시도했을 때 DrawItem()
방법은 분명히 문제가 발생했기 때문에 문제가 발생했습니다. SS_BLACKRECT
스타일이지만 내가 예상처럼 제어를 그릴 때까지 기다리고 있습니다.
내가 찾고 있다고 생각하는 것은 세 가지 중 하나라고 생각합니다. 사용하는 방법 GDI
기지 후 OnPaint()
메소드 마감. 컨트롤이 기본값을 그리는 방법 SS_BLACKRECT
스타일과 그때 OWNERDRAW
나중에 이미지. 또는 도면을 모방하는 코드 SS_BLACKRECT
.
마지막은 가장 쉬운 일이지만 나는 CStatic
기본 grawitem과 같은 제어.
해결책
전화 해보세요 Default()
당신의 OnPaint()
매니저.
그런 다음 이미지를 그리는 지 여부에 따라 표준 상단을 그릴 수 있습니다. CStatic
제어.
다른 팁
몇 가지 아이디어가 있습니다.
만약에 CStatic::OnPaint()
이미지를 그려서 먼저 호출하고 나중에 이미지를 그립니다.
그렇지 않으면 SS_BLACKRECT에서 내가 보지 못한 곳에서는 단순히 전화를 걸어서 복제 할 수 있어야합니다. CDC::FillSolidRect()
획득 한 직사각형을 통과합니다 GetClientRect()
그리고 반환 된 색상을 사용합니다 GetSysColor(COLOR_WINDOWFRAME)