Změnu barvy pozadí v dialogu lze implementovat
díky zprávě WM_CTLCOLOR Návratovou hodnotou metody, která tuto
zprávu obsluhuje je pak identifikátor (handle) štětce, který se pro
vybarvení pozadí má použít. Vygenerujme si tedy třídu, která bude představovat
dialog a vytvořme v ní členskou proměnnou, jež bude reprezentovat štětec.
Následující ukázka zdrojového kódu znázorňuje deklaraci této třídy.
class CColorDialogDlg : public CDialog
{
// ...
//}}AFX_VIRTUAL
protected:
CBrush m_brBkgnd;
// ...
};
|
V konstruktoru vytvoříme štetec, kterým později vybarvíme pozadí
dialogu. Je samozřejmě možné vytvořit např. bitmapový štětec a na pozadí
jednoduše zobrazovat bitmapu(y). Následující ukázka konstruktoru předvádí
vytvoření červeného štětce.
CColorDialogDlg::CColorDialogDlg(CWnd* pParent /*=NULL*/)
: CDialog(CColorDialogDlg::IDD, pParent)
{
//...
m_brBkgnd.CreateSolidBrush(RGB(255, 0, 0));
}
|
Nyní nezbývá než pomocí ClassWizardu vygenerovat metodu,
která bude obsluhovat zprávu WM_CTLCOLOR a vracet identifikátor
vytvořeného štětce. Podívejme se tedy na novou implementaci této metody.
HBRUSH CColorDialogDlg::OnCtlColor(CDC* pDC, CWnd* pWnd,
UINT nCtlColor)
{
return m_brBkgnd;
}
|
Na následujícím obrázku je vidět jak bude obarvený dialog vypadat.

Pokud potřebujeme změnit barvu pozadí (nebo textu) pro všechny
dialogy v naší aplikaci lze výhodně použít metodu SetDialogBkColor ze
třídy CWinApp. Volání této metody se typicky provádí v metodě InitInstance
naší aplikace. Podívejme se ještě na hlavičku této metody.
void SetDialogBkColor( COLORREF clrCtlBk =
RGB(192, 192, 192), COLORREF clrCtlText = RGB(0, 0, 0) );
|
clrCtlBk Barva pozadí
všech dialogů v aplikaci.
clrCtlText Barva všech textů.
|