2013-06-11 5 views
0

Я пытаюсь изменить цвет фона диалогового окна (win 7, vs2010, C++). Я попытался поймать WM_CTLCOLOR, WM_ERASEBKGND и изменить цвет. Мне удалось изменить таким образом цвет backgroung, но когда окно заканчивается для загрузки, цвет возвращается к умолчанию, но я заметил, что кадр находится в правильном цвете. Я думаю, что я меняю окно, а не диалоговое окно или что-то в этом роде. Я делаю это с WTL (не AFX).изменение цвета фона диалогового окна mfc

Что мне делать?

+0

просто введите название в гугле или изменении конца WTL показывает довольно обнадеживающие результаты –

+0

уже проверялись что, но я не нашел ничего перспективного – David

+0

Вопрос должен показывать все, что вы уже пробовали, и как это не удалось, так что ответы могут быть конкретными –

ответ

6

Попробуйте это:

///////////////////////////////////////////////////////////////////////////// 
// CAboutDlg dialog used for App About 

class CAboutDlg : public CDialog 
{ 
public: 
    CAboutDlg(); 

// Dialog Data 
    //{{AFX_DATA(CAboutDlg) 
    enum { IDD = IDD_ABOUTBOX }; 
    //}}AFX_DATA 

    // ClassWizard generated virtual function overrides 
    //{{AFX_VIRTUAL(CAboutDlg) 
    protected: 
    virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support 
    //}}AFX_VIRTUAL 

// Implementation 
protected: 
    //{{AFX_MSG(CAboutDlg) 
    //}}AFX_MSG 
    afx_msg BOOL OnEraseBkgnd(CDC* pDC); 
    DECLARE_MESSAGE_MAP() 
}; 

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) 
{ 
    //{{AFX_DATA_INIT(CAboutDlg) 
    //}}AFX_DATA_INIT 
} 

void CAboutDlg::DoDataExchange(CDataExchange* pDX) 
{ 
    CDialog::DoDataExchange(pDX); 
    //{{AFX_DATA_MAP(CAboutDlg) 
    //}}AFX_DATA_MAP 
} 

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) 
    //{{AFX_MSG_MAP(CAboutDlg) 
    ON_WM_ERASEBKGND() 
    //}}AFX_MSG_MAP 

END_MESSAGE_MAP() 




BOOL CAboutDlg::OnEraseBkgnd(CDC* pDC) 
{ 
    CRect rect; 
    GetClientRect(&rect); 
    CBrush myBrush(RGB(255, 255, 255)); // dialog background color 
    CBrush *pOld = pDC->SelectObject(&myBrush); 
    BOOL bRes = pDC->PatBlt(0, 0, rect.Width(), rect.Height(), PATCOPY); 
    pDC->SelectObject(pOld); // restore old brush 
    return bRes;      // CDialog::OnEraseBkgnd(pDC); 
} 

И посмотрит here ... и самое главное: here

+6

Ваш комментарий об использовании Google теперь не имеет значения, так как этот вопрос является главной ссылкой при поиске путей изменения mfc Цвет диалогового окна – Luke

+0

Что все эти прокомментированные строки (например, // AFX_MSG_MAP (CAboutDlg)) для? – aquirdturtle

+2

@ aquirdturtle эти комментарии генерируются старыми версиями VS, поэтому wizzard знает, куда вставлять код. –

Смежные вопросы