在视图中,它的背景是默认是白色的,我想把一幅图片作为它的背景,具体怎么去调用图片,
如果在CFormView中调用图片做为背景,会有什么不一样呢?
如果在以上以图片作为背景的视图中,再添加控件,可以吗,会不会有什么别的不良影响
请给出相关的代码或资料
如果在CFormView中调用图片做为背景,会有什么不一样呢?
如果在以上以图片作为背景的视图中,再添加控件,可以吗,会不会有什么别的不良影响
请给出相关的代码或资料
BOOL XXX::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
CDC dc;
dc.CreateCompatibleDC(pDC);
dc.SelectObject(&m_MainBG);
//获取BITMAP对象
BITMAP hb;
m_MainBG.GetBitmap(&hb);
//获取窗口大小
CRect rt;
GetWindowRect(&rt);
//显示位图
pDC->StretchBlt(0, 0, rt.Width(), rt.Height(),
&dc, 0, 0, hb.bmWidth, hb.bmHeight, SRCCOPY);
dc.DeleteDC();
return CDialog::OnEraseBkgnd(pDC);
}你加上按钮等控件可能要做一些控件透明处理
1、OnInitDialog()加载背景图片
2、OnEraseBkgnd(CDC* pDC) 显示背景图片
3、OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)设置透明背景模式
.h
CBitmap m_BackGround;.CPP
BOOL XXX::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
// 加载背景图片
m_BackGround.LoadBitmap(IDB_BG_A); return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}BOOL XXX::OnEraseBkgnd(CDC* pDC)
{
CDC dc;
dc.CreateCompatibleDC(pDC);
dc.SelectObject(&m_BackGround); //获取BITMAP对象
BITMAP hb;
m_BackGround.GetBitmap(&hb); //获取窗口大小
CRect rt;
GetClientRect(&rt); //显示背景图片
pDC->StretchBlt(0, 0, rt.Width(), rt.Height(),
&dc, 0, 0, hb.bmWidth, hb.bmHeight, SRCCOPY); return TRUE;
}HBRUSH XXX::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
// 设置透明背景模式
pDC->SetBkMode(TRANSPARENT);
// TODO: Return a different brush if the default is not desired
switch(nCtlColor)
{
// 设置背景刷子为空
case CTLCOLOR_STATIC: // 静态控件
case CTLCOLOR_DLG: // 对话框
return (HBRUSH)::GetStockObject(HOLLOW_BRUSH);
default:
return hbr;
}
}
手工添加OnEraseBkgnd(CDC* pDC).h
// Implementation
protected: // Generated message map functions
//{{AFX_MSG(CDlgEventBrowse)
virtual BOOL OnInitDialog();
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
//}}AFX_MSG
DECLARE_MESSAGE_MAP().cpp
BEGIN_MESSAGE_MAP(CDlgEventBrowse, CDialog)
//{{AFX_MSG_MAP(CDlgEventBrowse)
ON_WM_ERASEBKGND()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
其他格式的图片不能显示!!!!!!!!!
{
HINSTANCE hInst = AfxGetResourceHandle();
HRSRC hRsrc = ::FindResource (hInst,MAKEINTRESOURCE(nID),sTR); // type
if (!hRsrc)
return FALSE; // load resource into memory
DWORD len = SizeofResource(hInst, hRsrc);
BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc);
if (!lpRsrc)
return FALSE; // Allocate global memory on which to create stream
HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, len);
BYTE* pmem = (BYTE*)GlobalLock(m_hMem);
memcpy(pmem,lpRsrc,len);
IStream* pstm;
CreateStreamOnHGlobal(m_hMem,FALSE,&pstm); // load from stream
pImg=Gdiplus::Image::FromStream(pstm); // free/release stuff
GlobalUnlock(m_hMem);
pstm->Release();
GlobalFree(m_hMem);
FreeResource(lpRsrc); return TRUE;
}
把png格式的转化为image 格式,然后用GDI+画不知道可行否,没试过