2008-11-03 8 views
2

투명 대화 상자를 만들고 싶습니다. 내가있는 CDialog 파생 클래스에서 OnCtlColor 메시지를 캡처 ...이 코드입니다 : 그것은 모든 컨트롤에 대해 잘 작동하지만그룹 상자 텍스트 배경을 투명하게 만드는 방법

HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{ 
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 
    if(bSetBkTransparent_) 
    { 
     pDC->SetBkMode(TRANSPARENT); 
     hbr = (HBRUSH)GetStockObject(NULL_BRUSH);   
    } 


    return hbr; 
} 

그룹 상자 (CStatic의). 모든 레이블 (CStatic)은 투명한 텍스트 배경으로 칠해졌지만 그룹 상자의 텍스트는 투명하지 않습니다.

나는 이미 이것을 봤지만 해결책을 찾지 못했습니다. 아무도 진짜 투명한 그룹 박스를 만드는 법을 알고 있습니까?

그런데 저는 Windows XP에서 일하고 있습니다. 또한 응용 프로그램이 다른 OS로 마이그레이션되는 경우 코드를 변경하지 않아도되도록 컨트롤을 완전히 그려야합니다.

감사합니다,

하비에르

참고 : 나는 그것을 투명하게 할 필요가 없습니다 그래서 나는 마지막으로 대화를 변경했습니다. 어쨌든 누군가가 여전히 그것을하려고하기 때문에이 정보를 추가합니다. groupbox는 CStatic이 아니라 CButton입니다 (새로운 것은 아님). Windows XP 테마를 Windows classic으로 변경 한 후 그룹 박스 backgraund는 투명했습니다. 나쁜 점은이 경우 텍스트 프레임 아래에 프레임 선이 표시된다는 것입니다. 누군가가이 접근법을 따르고 있다면 Adzm의 조언을 따르는 것이 더 나을 것입니다.

+0

나는 매우 빠른 테스트에서 이것을 시도해 보았고 그룹 상자 텍스트는 투명했다 (그룹 상자조차도 텍스트 아래에 보일 정도로). 아마도 위의 코드에 문제가 없습니다. 빠른 데모 테스트 프로그램을 사용해보십시오. – DavidK

답변

1

두 가지 옵션이 있습니다.

일반 컨트롤 v6 (XP 스타일 컨트롤)을 사용할 수 없으므로 최신 Windows 버전의 기능을 잃게됩니다. 그러나 IIRC 그룹 박스는 CTLCOLOR 문제를 존중합니다. 당신이 어쨌든 그것을 사용하지 않고 여전히 당신의 색깔을 존중하지 않는다면, 당신은 오직 하나의 옵션을 가지고 있습니다. ...

스스로 그릴 것입니다. 네가 원하지 않는다고 말한 건 알지만 가끔은 네가해야 해. 고맙게도 그룹 상자는 그릴 매우 간단한 컨트롤입니다. 이 페이지에는 고전적인 스타일의 그룹 상자 그리기 예제가 있습니다. http://www.codeguru.com/cpp/controls/controls/groupbox/article.php/c2273/ XP +와 함께 제공되는 UxTheme 라이브러리를 사용하면 매우 간단하게 그릴 수 있습니다.

응용 프로그램을 다른 OS로 마이그레이션하는 경우 일반적으로 MFC 응용 프로그램을 통한 마이그레이션을 충분히 처리해야합니다. 이것이 목표라면 크로스 플랫폼 UI 툴킷을 사용하여 실제로 개발해야합니다.

1

단순히 WS_EX_TRANSPARENT 확장 창 스타일을 그룹 상자에 설정하십시오.

관련 문제