2012-09-13 34 views
5

Tôi đang thêm một hộp thoại mới vào ứng dụng C++ (Visual Studio 2010). Tôi không thể thoát khỏi nền xám của hộp kiểm được đặt trên tab đó là màu trắng theo mặc định:VS2010: Hộp kiểm có nền màu xám trên Tab trắng trong hộp thoại. Làm thế nào để sửa chữa nó?

Dialog being edited in the resource editor

Các văn bản liên quan trong file rc như sau:

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 

Nó hoạt động theo cùng một cách khi ứng dụng chạy. Tôi nên đặt hoặc làm gì cho các hộp kiểm là con của tab? Hoặc làm thế nào tôi có thể khắc phục vấn đề

Cảm ơn thời gian và kinh nghiệm của bạn, Petr

+1

Bạn đã thử đặt tính minh bạch của từng hộp kiểm thành true trong VS? – newenglander

+0

@newenglander: Vâng tôi đã làm. Nhưng nó không tạo nên sự khác biệt. Dường như nó có cửa sổ hộp thoại màu xám làm cha mẹ của các hộp kiểm và không phải là cửa sổ tab làm cha mẹ. – pepr

+0

bạn không thể thay đổi màu nền của hộp kiểm thành màu trắng? Các điều khiển Winform không phải là trasparent ... tốt nhất mà chúng có thể làm là giả sử cùng màu nền của kiểm soát cha mẹ của chúng – Max

Trả lời

5

Làm như thế này:

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

Thông tin thêm là here

Tôi không biết làm thế nào nhiều kỹ năng C++ của bạn, nhưng bạn cũng phải thêm một số dòng trong tệp .h của dự án của bạn để bao gồm chức năng OnCtlColor này và một số thay đổi trong bản đồ thư của tệp .cpp trong hộp thoại của bạn.

+0

Cảm ơn gợi ý! Trên thực tế, tôi đang sử dụng ATL/WTL, nhưng có những cách tương tự để xử lý WM_CTLCOLORxxx. Tôi cũng muốn đảm bảo rằng nó phải được thực hiện một cách rõ ràng. – pepr

+0

Bạn được chào đón, vui vì tôi có thể giúp –

Các vấn đề liên quan