VC++ 2010-05-15 15:51:19 閱讀37 評論0 字號:大中小
為了讓對話框程序更為漂亮,一般都是在窗口的WM_ERASEBKGND消息處理函數(shù)OnEraseBkgnd中添加如下代碼.
BOOL CMFCtestDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
CRect rect;
CPaintDC dc(this);
GetClientRect(&rect);
dc.FillSolidRect(rect,RGB(0,255,0));//對話框背景顯示為綠色
return TRUE;
// return CDialog::OnEraseBkgnd(pDC);
}
但在對話框程序中,我們打開MFC ClassWizard中的Message maps,找不到WM_ERASEBKGND消息的.雖然對話框也是窗口,所以對話框也會有此消息的響應(yīng)的.但是MFC把對話框中的窗口消息WM_ERASEBKGND給過濾掉了,這樣做是為了讓我們更著重于對話框的特有消息與控件消息.為了在對話框中能處理WM_ERASEBKGND消息,我們就需要把這個消息找出來.
打開MFC ClassWizard,選擇Class Info項.然后在Advanced options下的Message filter選擇: Window ,點擊OK,關(guān)閉MFC ClassWizard,后,重新打開就可以看到WM_ERASEBKGND消息了.
對話框載入背景圖也可以在WM_ERASEBKGND消息處理函數(shù)中進行.如下代碼BOOL CMFCtestDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
CRect rect;
CPaintDC dc(this);
GetClientRect(&rect);
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);
CBitmap bmpBKG;
bmpBKG.LoadBitmap(IDB_DLGBITMAP);//載入位圖,IDB_DLGBITMAP是在ResourceView里邊導(dǎo)入的位圖ID
BITMAP bmp;
bmpBKG.GetBitmap(&bmp);
CBitmap* pOldBMP = dcMem.SelectObject(&bmpBKG);
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
return TRUE;
// return CDialog::OnEraseBkgnd(pDC);
}
查看/建立類向?qū)?ClassInfo/Advanced Options/:Message filter:dialog->window