2011-08-08 5 views
3

그룹 상자 컨트롤의 텍스트 색과 배경을 만들려고합니다. 대화 상자와 Win32를 사용하고 있습니다. 내 문제를 설명하기 위해 문제를 재현하는 데 필요한 최소 코드가있는 프로젝트를 만들었습니다.Win32에서 그룹 상자 컨트롤에 색상을 지정하는 방법은 무엇입니까?

대화 상자를 사용하여 일종의 비트 맵을 배경으로두면 그룹 상자 컨트롤의 실제 색상을 쉽게 볼 수 있습니다. 어떤 오버라이드 (override)하지 않고 기본적으로 지금과 같이 표시됩니다

case WM_CTLCOLORSTATIC: { 
    HDC hDC = (HDC)wParam; 
    SetTextColor(hDC, RGB(255, 255, 255)); 
    SetBkMode(hDC, TRANSPARENT); 
    return (INT_PTR)GetStockObject(HOLLOW_BRUSH); 
} 

I 시험 :

http://localhostr.com/file/ItBy6DF/no%20override.png

나는 흰색의 텍스트 색상과 다음 코드로 투명 텍스트 배경을 설정하려고 시도합니다 와 함께 매니페스트을 변경하여 사용할 시각적 스타일이없는 모양 : 시각적 스타일로

#pragma comment(linker,"\"/manifestdependency:type='win32' \ 
    name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \ 
    processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") 

는 대화 상자가 너무과 같다 :

http://localhostr.com/file/hyJOhsj/theming.png

배경은 대화 상자의 배경이 무엇인지에 따라 받아 들일 수없는 단색으로 변경됩니다. 또한 텍스트 색상이 변경되지 않았습니다. 시각적 스타일이 비활성화로, 대화는 그래서 다음과 같습니다

http://localhostr.com/file/8nVzn7t/no%20theming.png

텍스트 색상 변경 및 투명성이 근무하고 있지만, 텍스트는 경우에도 그룹 상자의 사각형을 보여줍니다.

here 프로젝트에 대한 테스트에 관심이있는 사용자를 위해 프로젝트를 업로드했습니다.

나는이 사이트에서 서브 클래 싱이나 ownerdrawing 없이는 가능하지 않은 것으로 보이는 다른 유사한 질문을 읽었습니다. 서브 클래 싱하는 데는 신경 쓰지 않지만 우선 먼저 더 좋은 방법은 없는지 확인하고 있습니다. 유일한 방법은 서브 클래 싱하는 경우 무엇을 재정의해야합니다 (아마 WM_PAINT)에 대한 정보를 기쁘게 것입니다. 자신의 그룹 상자 컨트롤을 만드는 사람들의 온라인 예제를 발견했지만 일부는 z- 주문 문제로 어려움을 겪고있는 것 같습니다. 따라서 서브 클래 싱을 사용하면 WM_NCHITTEST를 처리하는 것이 적절합니까?

마찬가지로 소유자 그리기 스타일을 SetWindowLong()으로 전환 한 다음 WM_DRAWITEM 메시지를 가져 오기 위해 컨트롤의 하위 클래스를 만들면주의해야 할 사항이 있습니까? 비주얼 스타일 등을 어떻게 처리해야합니까?

+0

당신은 테마 API –

+0

@David Heffernan으로 이것을 직접 작성해야한다고 생각합니다. 고전적인 테마와 시각적 스타일 모두를 사용하려면 ArcTo 등의 GDI 함수를 사용하는 것이 좋습니다. .? 그룹 박스 컨트롤을 ownerdraw 할 수 있습니까? 아니면 대화 상자의 WM_PAINT에서해야합니까? –

+0

클래식과 테마에 대해 별도의 코드가 필요합니다. –

답변

1

WM_CTLCOLORSTATIC에 대해 GetStockObject (HOLLOW_BRUSH) 대신 hBrBackground를 반환 해 보셨습니까?

0

낡은 질문이지만 누군가 대답을 검색 할 수 있습니다. 그룹 상자 텍스트의 배경을 창 배경과 동일하게 만들려면 SetBkMode 함수에서 TRANSPARENTOPAQUE으로 변경하십시오.

관련 문제