VC中添加背景图片
2009-12-02
1新建一个基于对话框的MFC工程。在resource view选项卡中bitmap中加入需要的背景图片。为IDB_BITMAP1.
2 在oninitdialog函数中添加:
BOOL CSteinbergDlg::OnInitDialog()
{
CDialog::OnInitDialog();
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
.................................
..............................
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
CBitmap m_back;//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
m_back.LoadBitmap(IDB_BLUE); //背景图片添加1,一共有三处。//////////////////////////////////////////
.....................
return TRUE;
}
3 添加消息响应函数OnCtlColor 和 OnEraseBkgnd.如果在Class vizard 中找不到WM_ERASEBKGND,在Class info选项卡中message filter中选择window 即可。
HBRUSH CSteinbergDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
pDC->SetBkMode(TRANSPARENT); //设置透明背景模式2///////////////////////////////////////////////////////////////
return (HBRUSH)::GetStockObject(HOLLOW_BRUSH);//设置背景刷子为空2///////////////////////////////////////
}
BOOL CSteinbergDlg::OnEraseBkgnd(CDC* pDC) //更改背景3,windows 在发出WM_PAINT消息前发WM_ERASEBKGND擦除背景。
{
CBitmap m_back,*pOldBitmap;/////////////////////////////////////////////////////
BITMAP bm;/////////////////////////////////////////////////////////////////////////////////////
m_back.LoadBitmap(IDB_BLUE);//////////////////////////////////////////////////////
CDC dc;/////////////////////////////////////////////////////////////////////////////////////////////////
dc.CreateCompatibleDC(pDC);////////////////////////////////////////////////////////////
pOldBitmap=(CBitmap *)dc.SelectObject(&m_back);///////////////////////////////////////
m_back.GetBitmap(&bm);///////////////////////////////////////////////////////////////////////////////////
CRect rt;/////////////////////////////////////////////////////////////////////
GetClientRect(&rt);////////////////////////
pDC->StretchBlt(0,0,rt.Width(),rt.Height(),&dc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);///////////////////
return CDialog::OnEraseBkgnd(pDC);////////////////////////////////////
}
OK了
但是它与皮肤添加是不可兼得的。anyway,whatever you like ,just do it.