Windows在向窗口发送WM_PAINT消息之前,总会发送一个WM_ERASEBKGND消息通知该窗口擦除背景,默认情况下,Windows将以窗口的背景色清除该窗口。
可以响应窗口(包括子元素)的WM_ERASEBKGND,以更改它们的背景。WM_ERASEBKGND的映射函数原型如下:
afx_msg BOOL OnEraseBkgnd( CDC* pDC );
返回值:
指定背景是否已清除,如果为FALSE,系统将自动清除
参数:
pDC指定了绘制操作所使用的设备环境。
大致代码时:
BOOL CUi4Dlg::OnInitDialog()
{
//…
//加载位图
//CBitmap m_Back;
m_Back.LoadBitmap(IDB_BACK);
//…
}
BOOL CUi4Dlg::OnEraseBkgnd(CDC* pDC)
{
CDC dc;
dc.CreateCompatibleDC(pDC);
dc.SelectObject(&m_Back);
//获取BITMAP对象
BITMAP hb;
m_Back.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 CUi4Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
//设置透明背景模式
pDC->SetBkMode(TRANSPARENT);
//设置背景刷子为空
return (HBRUSH)::GetStockObject(HOLLOW_BRUSH);
}
对话框加入图片时,采用下面的方法:
步骤:
先在资源里Import一张图片,ID为IDB_BITMAP2
然后在对话框上添加一个picture控件,右键点击打开属性,
将type下拉框选择BITMAP,紧跟着下面就出现一个Image下拉框,
拉开就会看到所有已经载入好的图片,
选择你要的图片.运行程序即可看到.
参考了2篇文章:
http://www.vcer.net/1046595482643.html
http://www.cnblogs.com/mingzi/archive/2008/07/19/1246792.html