2012-09-13 5 views
5

Dodaję nowe okno dialogowe do aplikacji C++ (Visual Studio 2010). Nie mogę pozbyć się szarym tle pól wyboru, które są umieszczone na karcie, że jest biały domyślnie:VS2010: Pola wyboru mają szare tło na białej karcie w oknie dialogowym. Jak to naprawić?

Dialog being edited in the resource editor

Odnośny tekst w pliku .rc jest następujący:

IDD_ExportHTML DIALOGEX 164, 128, 292, 136 
STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | WS_POPUP | WS_CAPTION | WS_SYSMENU 
FONT 8, "MS Sans Serif", 0, 0, 0x0 
BEGIN 
    LTEXT   "statFileName0",102,9,9,59,8 
    LTEXT   "statFileName",101,9,20,190,8 
    CONTROL   "",150,"SysTabControl32",TCS_RAGGEDRIGHT,11,38,201,92 
    DEFPUSHBUTTON "btnOK",IDOK,241,97,45,15 
    PUSHBUTTON  "btnCancel",IDCANCEL,241,115,45,15 
    CONTROL   "chboxLines",106,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,34,71,135,12 
    CONTROL   "chboxBackground",107,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,34,84,135,12 
    CONTROL   "chboxPaging",108,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,34,98,135,12 
END 

Zachowuje się tak samo, gdy aplikacja działa. Co powinienem ustawić lub powiedzieć checkboxom, które są dziećmi tej karty? Lub w jaki sposób mogę rozwiązać problem

Dzięki za poświęcony czas i doświadczenie, Petr

+1

Czy próbowałeś ustawić przezroczystość każdego z pól wyboru na true w VS? – newenglander

+0

@newenglander: Tak, zrobiłem. Ale to nie robi różnicy. Wygląda to tak, jakby okno dialogowe było szarem jako rodzic pól wyboru, a nie okno karty jako obiekt nadrzędny. – pepr

+0

Nie możesz zmienić koloru tła pola wyboru na biały? Kontrolki WinNet nie są trasparentem ... najlepiej mogą zakładać ten sam kolor tła nadrzędnej kontroli. – Max

Odpowiedz

5

zrobić coś takiego:

HBRUSH CYourDialogHere::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{ 

    HBRUSH hbr = (HBRUSH)m_brush; 
    CWnd *pCheckBox = GetDlgItem(IDC_CHECK1); // put ID of your checkbox here. 

    if (*pCheckBox == *pWnd) 
    { 
     pDC->SetBkColor(RGB(255, 0, 0)); 
    } 
    else 
     hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 

    return hbr; 
} 

Więcej informacji jest here

nie wiem jak dużo jest twoich umiejętności w C++, ale musisz również dodać kilka linii w pliku .h twojego projektu, aby włączyć tę funkcję OnCtlColor i trochę zmiany w mapie wiadomości w twoim pliku dialogowym .cpp.

+0

Dzięki za podpowiedź! Właściwie używam ATL/WTL, ale istnieją inne sposoby radzenia sobie z WM_CTLCOLORxxx. Chciałem również upewnić się, że należy to zrobić wyraźnie. – pepr

+0

Nie ma za co, cieszę się, że mogłem pomóc –

Powiązane problemy