怎么样把内存dc的上画的图形,透明输出在客户区dc上

hufeikong 2011-09-24 12:05:55


CClientDC dc(this); // 注意不要用PaintDC.
CRect rect;
GetClientRect(&rect);
//内存dc,背景刷子使用默认的黑色
HDC hdcMem = CreateCompatibleDC(dc);
HBITMAP hMemBitmap = CreateCompatibleBitmap(dc, rect.right, rect.bottom);
SelectObject(hdcMem, hMemBitmap);
/*
在这里进行绘图操作
*/
//画完后,想把内存dc内的图形透明的贴在dc上,SRCCOPY这个参数是完全拷贝整个区域
BitBlt(dc, 0, 0, rect.right, rect.bottom, hdcMem, 0, 0, SRCCOPY);
DeleteDC(hdcMem);
DeleteObject(hMemBitmap);



//画完后,想把内存dc内的图形透明的贴在dc上,SRCCOPY这个参数是完全拷贝整个区域
BitBlt(dc, 0, 0, rect.right, rect.bottom, hdcMem, 0, 0, SRCCOPY);

现在:客户区的背景也是有图形的,不能把整个区域都覆盖

内存dc的背景是黑色

怎样只把内存dc中的图形透明的画出来
...全文
217 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ipman 2014-02-06
  • 打赏
  • 举报
回复
如何才能可以处理透明度?
__lhy 2011-10-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cometnet 的回复:]

TransparentBlt
函数功能:该函数对指定的源设备环境中的矩形区域像素的颜色数据进行位块(bit_block)转换,并将结果置于目标设备环境。
  函数原型:BOOL TransparentBlt(HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int hHeightDest, HDC hdcSrc……
[/Quote]
就这个
向立天 2011-10-15
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
M_S_D_N 2011-09-24
  • 打赏
  • 举报
回复
或者用掩码,或者用透明通道。
ywwj5858792qd 2011-09-24
  • 打赏
  • 举报
回复
内存dc的背景是黑色

不知道能否用NULL_Brush透明画刷刷下而使背景透明?只是个想法,不知道可行不
邓学彬 2011-09-24
  • 打赏
  • 举报
回复
TransparentBlt
  函数功能:该函数对指定的源设备环境中的矩形区域像素的颜色数据进行位块(bit_block)转换,并将结果置于目标设备环境。
  函数原型:BOOL TransparentBlt(HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int hHeightDest, HDC hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, UINT crTransparent);
  参数:
  hdcDest:指向目标设备环境的句柄。
  nXOriginDest:指定目标矩形左上角的X轴坐标,坐标以逻辑单位表示。
  nYOriginDest:指定目标矩形左上角的Y轴坐标,坐标以逻辑单位表示。
  nWidthDest:指定目标矩形的宽度。
  nHeightDest:指定目标矩形的高度。
  hdcsrc:指向源设备环境的句柄。
  nXOriginSrc:指定源矩形(左上角)的X轴坐标,坐标以逻辑单位表示。
  nYOriginsrc:指定源矩形(左上角)的Y轴坐标,坐标以逻辑单位表示。
  nWidthSrc:指定源矩形的宽度。
  nHeightSrc:指定源矩形的高度。
  crTransparent:源位图中的RGB值当作透明颜色。

返回值:如果函数执行成功,那么返回值为TRUE;如果函数执行失败,那么返回值为FALSE。

  Windows NT:若想获取更多错误信息,请调用GetLastError函数。

  备注:函数TransparentBlt支持4位/像素和8位/像素格式的源位图,使用AlphaBlend可以指定带有透明度的32位/像素格式的位图。如果源和目标矩形的大小不一致,那么将对源位图进行拉伸以与目标矩形匹配,当使用SetStretchBltMode函数时,BLACKONWHITE和WHITEONBLACK两种iStretchMode模式将被转换成TransparentBlt函数的COLORONCOLOR模式。目标设备环境指定了用于目标坐标的变换类型,而源设备环境指定了源坐标使用的变换类型。如果源位图或目标位图的宽度或高度是负数,那么TransparentBlt函数也不对位图进行镜像。

  速查:Windows NT:5.0及以上版本;Windows:98及以上版本;Windows CE:Windows CE .NET 4.0 and later;头文件:wingdi.h:库文件:作为一个资源包含在msimg32.dll中。






  • 打赏
  • 举报
回复
TRANSPARENT
用户 昵称 2011-09-24
  • 打赏
  • 举报
回复
可以 使用 SRCAND
凤矶 2011-09-24
  • 打赏
  • 举报
回复
SetBkMode

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧