對話框控件背景,、字體顏色設(shè)置 收藏
1,、控件背景顏色
每個(gè)控件和對話框本身在宣示之前會向其父對話框發(fā)送WM_CTLCOLOR消息,。如果你在派生類對話框?qū)M_CTLCOLOR消息進(jìn)行映射,就可以設(shè)定控件的顏色,,以及某些控件的背景顏色和字體的顏色,。
HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT
nCtlColor)
{
if((nCtlColor==CTLCOLOR_EDIT)&&
pWnd->GetDlgCtrlID()==IDC_EDIT1)
// 對ID號為IDC_EDIT1的EDIT控件屬性進(jìn)行設(shè)定
{
pDC->SetBkColor(RGB(255,0,255)); //設(shè)定文本的背景色
pDC->SetTextColor(RGB(255,255,0));//設(shè)定文本顏色
return m_hYellowBrush;// 設(shè)定控件的填充顏色
}
if(nCtlColor==CTLCOLOR_STATIC)
//對所有的STATIC控件的屬性進(jìn)行設(shè)定
{
pDC->SetBkColor(RGB(0,0,0));
pDC->SetTextColor(RGB(255, 255, 0));
pDC->SetBkMode(TRANSPARENT);
return m_hBlue;
}
HBRUSH hbr =
CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
return hbr;
}
nCtlColor的其它對應(yīng)值:
CTLCOLOR_BTN(按鈕),CTLCOLOR_DLG(對話框),,CTLCOLOR_LISTBOX(列表框),,CTLCOLOR_MSGBOX(消息框),CTLCOLOR_SCROLLBAR(滾動條)。
2,、圖片作為背景并做透明處理
(1)對話框中增加成員變量或者全局變量如下:
CBitmap m_bmDents;
CBrush m_brDents;
(2)在OnInitDialog()中加入導(dǎo)入函數(shù):
BOOL CMyDlg::OnInitDialog()
{ ……
m_bmDents.DeleteObject();
m_brDents.DeleteObject();
m_bmDents.LoadBitmap(IDB_BITMAP1);
//導(dǎo)入背景圖片
m_brDents.CreatePatternBrush(&m_bmDents);
}
(3)在對話框增加OnCtlColor消息函數(shù)(在VC生成的函數(shù)修改如下,條件判斷中就是對各種控件的透明處理):
HBRUSH CBitMapDlgDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT
nCtlColor)
{
if(nCtlColor == CTLCOLOR_DLG || nCtlColor == CTLCOLOR_BTN ||
nCtlColor
==
CTLCOLOR_STATIC)
{
pDC->SetBkMode(TRANSPARENT);
return m_brDents;
}
return(CDialog::OnCtlColor(pDC, pWnd, nCtlColor));
}
3,、設(shè)置對話框背景位圖
對于文檔視圖結(jié)構(gòu)和基于對話框的應(yīng)用程序都對應(yīng)著相應(yīng)的WINDOWS消息WM_ERASEBKGND,對該消息進(jìn)行映射就可以用于背景的修改
BOOL CMyDlg::OnEraseBkgnd(CDC* pDC)
{
CBitmap bitmap;
CRect
client;
CDC
dc;
GetClientRect(&client);
BITMAP hb;
bitmap.LoadBitmap(IDB_BITMAP1);//IDB_BITMAP1為資源中背景位圖資源的ID號
dc.CreateCompatibleDC(pDC);
dc.SelectObject(&bitmap);
bitmap.GetObject(sizeof(hb),&hb);
pDC->StretchBlt(0,0,client.right-client.left,client.bottom-client.top,&dc,
0,0,hb.bmWidth,hb.bmHeight,SRCCOPY);
return TRUE;
}
4,、改變對話框背景顏色
最簡單的方法就是在OnPaint()中添加如下語句即可:
CRect rect;
CPaintDC dc(this);
GetClientRect(rect);
dc.FillSolidRect(rect,RGB(0,255,0));
參考資料:
http://hi.baidu.com/leggle/blog/item/2c388c3edda5fc3b70cf6c87.html