2010-04-27 2 views
0

저는 간단한 propertySheet (CPropertySheet) 및 몇 개의 CPropertyPage 파생 클래스를 만들었습니다.CPropertySheet 및 CPropertyPages는 흰색으로 표시됩니다.

응용 프로그램을 실행하는 동안 전문가 시트, 페이지 및 탭이 흰색으로 표시됩니다.

정상적인 미망인 대화 색과 같을 것으로 예상했습니다.

다른 일반적인 MFC 대화 상자처럼 페이지 배경을 속성 시트 만들기위한 단서가 나타납니다?

.NET CLR없이 Visual Studio 2008 MFC를 사용합니다.

답변

1

'시스템 색'이란 무엇입니까? 회색 (COLOR_BTNFACE)? 어떤 OS를 사용하고 있습니까? XP의 경우 속성 시트가 ​​COLOR_BTNFACE에 있어야합니다. Vista/Win7에서는 적절한 색상이 무엇인지 알지 못합니다. 특별한 작업을하지 않으면 시스템 기본 색상으로 표시됩니다.

+0

나를 위해, 속성 시트와 페이지 배경은 흰색입니다. 어떤 단서? –

+1

예, 질문에 그렇게 말했습니다. 내 대답을 읽고, 그 내용을 이해하고, 질문에 대답하여 어디든 갈 수 있도록하십시오. 이미 원래의 질문에 있던 정보를 반복하는 것만으로도 우리를 어디든지 데려 오지 않을 것입니다. – Roel

+0

내 질문을 업데이트했습니다. 어떤 대답? –

0

이것은 MFC 버그입니다. spy ++ 모니터를 사용하면 앱에 많은 WM_GETDLGCODE 메시지가 수신되고 죽은 루프가되는 것 같습니다. 그래, 그게 문제 야.

Microsoft는 문제의 PRB를 게시했습니다. 보기 : PRB: Child CPropertySheet Hangs If Focus Is Switched

요약하면 WS_EX_CONTROLPARENT 스타일을 PropertySheet에 추가하십시오.

BOOL CMySheet::OnInitDialog() 
    { 
      ModifyStyleEx (0, WS_EX_CONTROLPARENT); 
      return CPropertySheet::OnInitDialog(); 
    } 
0

WM_CTLCOLORDLG 메시지를 처리하십시오.

case WM_CTLCOLORDLG: 
    { 
     HDC hdc = (HDC)wParam; 
     COLORREF color = GetSysColor(COLOR_3DFACE); 
     SetBkColor(hdc, color); 
     static HBRUSH brush = CreateSolidBrush(color); 
     return (BOOL)brush; 
    } 
관련 문제