transparentblt
MFC中比较重要的一部分学习内容即是绘图,而绘图时我们会发现如果想插入一张图片而又不想要图片的背景,或者已经把图片的背景用Ps去掉了,但是在MFC窗口中显示图片的时候又有了白色的背景,这个时候就可以使用transparentblt函数(通常支持位图)来实现将图片背景变透明。
一、添加位图。
在资源视图中,右击 项目.rc —>添加资源 —>Bitmap —>导入是已有的图片,新建是自己绘制。—>选择需要添加的图片
添加完成后,资源视图Bitmap中看到的图片的名字就是图片的ID,注意确保Resource.h文件中已有了图片的声明。
二、TransparentBlt函数的使用
TransparentBlt 函数在windows98/Windows2000以上版本运行,系统中需要包含 Msimg32.dll,使用时可以链接 Msimg32.lib。
Windows98下的TransparentBlt会产生资源泄漏,所以不建议在win98下使用该函数。
TransparentBlt函数原型如下:
BOOL TransparentBlt(
HDC hdcDest, // 目标DC
int nXOriginDest, // 目标X偏移
int nYOriginDest, // 目标Y偏移
int nWidthDest, // 目标宽度
int hHeightDest, // 目标高度
HDC hdcSrc, // 源DC
int nXOriginSrc, // 源X起点
int nYOriginSrc, // 源Y起点
int nWidthSrc, // 源宽度,必须小于或等于位图的实际宽度
int nHeightSrc, // 源高度,必须小于或等于位图的实际高度
UINT crTransparent // 透明色,colorref类型
使用示例:
CPaintDC dc(this);//创建一个dc
CBitmap ObcBMP,*pOldImageBMP;
BITMAP bmp;
ObcBMP.LoadBitmap(IDB_BITMAP1);//从资源加载位图(括号中即为位图的ID)
ObcBMP.GetObject(sizeof BITMAP,&bmp);//获取位图的宽高等信息
CDC ImageDC;
ImageDC.createcompatibledc(&dc);
pOldImageBMP = ImageDC.SelectObject(&ObcBMP);//将之前对象保存
TransparentBlt(dc.m_hDC,0,0,30,48,ImageDC.m_hDC,0,0,30,48,RGB(255,255,255));//设置白色为透明色
ImageDC.SelectObject(pOldImageBMP);
Transparent的最后一个参数为RGB(),若设置白色背景透明则参数为RGB(255,255,255), 若设置黑色背景透明则参数为RGB(0,0,0)
本文就简单介绍TransparentBlt函数的用法,如果想深入了解可以查阅我的参考文章:
http://blog.csdn.net/piaopiaopiaopiaopiao/article/details/41490929
http://www.360doc.com/content/14/0213/18/15753510_352255712.shtml
http://www.cnblogs.com/Caiqinghua/archive/2009/02/16/1391945.html
相关阅读
现在需要安装 MindManager 2016 思维导图软件时,打开软件提示找不到 mfc100u.dll,无法执行程序。之前一直好好的,现在换电脑了安装
MFC隐藏进程自身(任务管理器不可见,wSysCheck等工具可见
MFC隐藏进程只要把cpp和h加入工程,include就可以了。 代码地址: //------------------HideProcess.h-------------------- //
CString 是编程中一种非常有用的数据类型,它是MFC中的一个类,很大程度上简化了MFC中的许多字符串的操作。CString位于头文件afx.h中
MFC中UpdateData(FALSE)与UpdateData(TRUE)的区别
UpdateData(FALSE):将程序中改变的变量的值更新至控件中去; UpdateData(TRUE):将控件中输入的值更新到变量中。
在MFC 中,有时候需要填充背景色,或者叫着填充一个矩形的颜色,这个时候可以使用2种方法:FillRect和FillSolidRect. FillRect使用的是一