2012-09-13 5 views
5

Sto aggiungendo una nuova finestra di dialogo all'applicazione C++ (Visual Studio 2010). Non riesco a liberarmi di sfondo grigio di caselle di controllo che vengono inseriti nella scheda che è bianco per default:VS2010: le caselle di controllo hanno uno sfondo grigio nella scheda bianca nella finestra di dialogo. Come sistemarlo?

Dialog being edited in the resource editor

Il testo relativo nel file RC è il seguente:

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 

Si comporta allo stesso modo quando viene eseguita l'applicazione. Cosa devo impostare o dire alle caselle di controllo che sono figli della scheda? O come posso risolvere il problema

Grazie per il tuo tempo e l'esperienza, Petr

+1

Hai provato a impostare la trasparenza di ogni casella di controllo su true in VS? – newenglander

+0

@newenglander: Sì, l'ho fatto. Ma non fa la differenza. Sembra che la finestra di dialogo grigia diventi il ​​padre delle caselle di controllo e non la finestra a schede come genitore. – pepr

+0

non è possibile cambiare il colore di sfondo della casella di controllo in bianco? .Net I controlli Winform non sono trasparenti ... il meglio che possono fare è assumere lo stesso colore di fondo del controllo genitore. – Max

risposta

5

fare qualcosa di simile:

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; 
} 

Maggiori informazioni è here

Io non so come molte sono le tue abilità in C++, ma devi aggiungere anche alcune righe nel file .h del tuo progetto per includere questa funzione di OnCtlColor e qualche modifica nella mappa dei messaggi del tuo file di dialogo .cpp.

+0

Grazie per il suggerimento! In realtà, sto usando ATL/WTL, ma ci sono modi simili per gestire WM_CTLCOLORxxx. Volevo anche assicurarmi che fosse fatto esplicitamente. – pepr

+0

Prego, felice di poterti aiutare –

Problemi correlati