posts - 131, comments - 12, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

MFC对话框背景贴图bmp格式

Posted on 2012-10-25 17:38 盛胜 阅读(643) 评论(0)  编辑 收藏 引用
新建一个MFC项目
在类视图中添加OnEraseBkgnd的消息响应函数,函数的编写如下:
BOOL CbackgDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CDialog::OnEraseBkgnd(pDC);   
if(!m_Bitmap.m_hObject)
return true;
CRect rect;
GetClientRect(&rect);
        //设备上下文对象的类
CDC dc;
//该函数创建一个与指定设备兼容的内存设备上下文环境(DC)
dc.CreateCompatibleDC(pDC);
        //该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象
CBitmap* pOldBitmap = dc.SelectObject(&m_Bitmap);
int bmw, bmh ;
BITMAP bmap;
m_Bitmap.GetBitmap(&bmap);
bmw = bmap.bmWidth;
bmh = bmap.bmHeight;
int xo=0, yo=0;
////////此处贴图采用拉伸strentch//////////
pDC->StretchBlt(xo, yo, rect.Width(),rect.Height(), &dc,
0, 0,bmw,bmh, SRCCOPY);
/////////////////////////////////////////
dc.SelectObject(pOldBitmap);
return true;
//return CDialog::OnEraseBkgnd(pDC);
}
m_bitmap在头文件中声明 
private:
CBitmap m_Bitmap;
并在窗口初始化函数OnInitDialog()中添加一句:
m_Bitmap.LoadBitmap(IDB_BITMAP1);

图片为bmp格式可行,图片为png格式不可行。其他图片类型未测试。

BOOL StretchBlt(HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeightDest, HDC hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, DWORD dwRop);
hdcDest:指向目标设备环境的句柄。
  nXOriginDest:指定目标矩形左上角的X轴坐标,按逻辑单位表示坐标。
  nYOriginDest:指定目标矩形左上角的Y轴坐标,按逻辑单位表示坐标。
  nWidthDest:指定目标矩形的宽度,按逻辑单位表示宽度。
  nHeightDest:指定目标矩形的高度,按逻辑单位表示高度。
  hdcSrc:指向源设备环境的句柄。
  nXOriginSrc:指向源矩形区域左上角的X轴坐标,按逻辑单位表示坐标。
  nYOriginSrc:指向源矩形区域左上角的Y轴坐标,按逻辑单位表示坐标。
  nWidthSrc:指定源矩形的宽度,按逻辑单位表示宽度。
  nHeightSrc:指定源矩形的高度,按逻辑单位表示高度。
  dwRop:指定要进行的光栅操作。光栅操作码定义了系统如何在输出操作中组合颜色,这些操作包括刷子、源位图和目标位图等对象。参考BitBlt可了解常用的光栅操作码列表。
  下面列出了一些常见的光栅操作代码: BLACKNESS:表示使用与物理调色板的索引0相关的色彩来填充目标矩形区域,(对缺省的物理调色板而言,该颜色为黑色)。 DSTINVERT:表示使目标矩形区域颜色取反。 MERGECOPY:表示使用布尔型的AND(与)操作符将源矩形区域的颜色与特定模式组合一起。 MERGEPAINT:通过使用布尔型的OR(或)操作符将反向的源矩形区域的颜色与目标矩形区域的颜色合并。 NOTSRCCOPY:将源矩形区域颜色取反,再拷贝到目标矩形区域。 NOTSRCERASE:使用布尔类型的OR(或)操作符组合源和目标矩形区域的颜色值,然后将合成的颜色取反。 PATCOPY:将特定的模式拷贝到目标位图上。 PATPAINT:通过使用布尔OR(或)操作符将源矩形区域取反后的颜色值与特定模式的颜色合并。然后使用OR(或)操作符将该操作的结果与目标矩形区域内的颜色合并。 PATINVERT:通过使用XOR(异或)操作符将源和目标矩形区域内的颜色合并。 SRCAND:通过使用AND(与)操作符来将源和目标矩形区域内的颜色合并。 SRCCOPY:将源矩形区域直接拷贝到目标矩形区域。 SRCERASE:通过使用AND(与)操作符将目标矩形区域颜色取反后与源矩形区域的颜色值合并。 SRCINVERT:通过使用布尔型的XOR(异或)操作符将源和目标矩形区域的颜色合并。 SRCPAINT:通过使用布尔型的OR(或)操作符将源和目标矩形区域的颜色合并。 WHITENESS:使用与物理调色板中索引1有关的颜色填充目标矩形区域。(对于缺省物理调色板来说,这个颜色就是白色)

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理