VC中添加背景图片

2019-06-17  本文已影响0人  Drlilian

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.

上一篇下一篇

猜你喜欢

热点阅读