對話方塊控制元件背景、字型顏色設定
1、控制元件背景顏色
每個控制元件和對話方塊本身在宣示之前會向其父對話方塊傳送WM_CTLCOLOR訊息。如果你在派生類對話方塊對WM_CTLCOLOR訊息進行對映,就可以設定控制元件的顏色,以及某些控制元件的背景顏色和字型的顏色。
HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
if((nCtlColor==CTLCOLOR_EDIT)&& pWnd->GetDlgCtrlID()==IDC_EDIT1)
// 對ID號為IDC_EDIT1的EDIT控制元件屬性進行設定
{
pDC->SetBkColor(RGB(255,0,255)); //設定文字的背景色
pDC->SetTextColor(RGB(255,255,0));//設定文字顏色
return m_hYellowBrush;// 設定控制元件的填充顏色
}
if(nCtlColor==CTLCOLOR_STATIC)
//對所有的STATIC控制元件的屬性進行設定
{
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的其它對應值:
CTLCOLOR_BTN(按鈕),CTLCOLOR_DLG(對話方塊),CTLCOLOR_LISTBOX(列表框),CTLCOLOR_MSGBOX(訊息框),CTLCOLOR_SCROLLBAR(滾動條)。
2、圖片作為背景並做透明處理
(1)對話方塊中增加成員變數或者全域性變數如下:
CBitmap m_bmDents;
CBrush m_brDents;
(2)在OnInitDialog()中加入匯入函式:
BOOL CMyDlg::OnInitDialog()
{ ……
m_bmDents.DeleteObject();
m_brDents.DeleteObject();
m_bmDents.LoadBitmap(IDB_BITMAP1); //匯入背景圖片
m_brDents.CreatePatternBrush(&m_bmDents);
}
(3)在對話方塊增加OnCtlColor訊息函式(在VC生成的函式修改如下,條件判斷中就是對各種控制元件的透明處理):
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、設定對話方塊背景點陣圖
對於文件檢視結構和基於對話方塊的應用程式都對應著相應的WINDOWS訊息WM_ERASEBKGND,對該訊息進行對映就可以用於背景的修改
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));
參考資料: