VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 602|回复: 6

[原创] 分层窗口UpdateLayeredWindowIndirect局部更新

[复制链接]
00_avatar_middle
online_vip 密码错误 发表于 2017-11-13 21:12:28 | 显示全部楼层 |阅读模式
参照MSDN研究UpdateLayeredWindowIndirect局部更新终于成功,关键参数prcDirty;发表给需要的朋友
bool AfxUpdateLayeredWindowIndirect(const HWND hWnd, const HDC & hDc, RECT * prcDirty, UINT Alpha)
        {
                POINT pptDst;
                SIZE  psize;
                RECT lpr;
                if (!GetWindowRect(hWnd, &lpr))
                        return false;
                pptDst.x = lpr.left;
                pptDst.y = lpr.top;
                psize.cx = lpr.right - lpr.left;
                psize.cy = lpr.bottom - lpr.top;
                POINT pptSrc = { 0,0 };
                HDC hdc = GetDC(hWnd);
                BLENDFUNCTION Blend;  //该BLENDFUNCTION结构控制通过指定源和目的地的位图的混合函数共混
                Blend.BlendOp = AC_SRC_OVER; //源混合操作。目前,唯一定义的源和目标混合操作是AC_SRC_OVER
                Blend.BlendFlags = 0; //必须为零
                Blend.AlphaFormat = AC_SRC_ALPHA; //该成员控制源和目标位图的解释方式
                Blend.SourceConstantAlpha = Alpha;//指定要在整个源位图上使用的Alpha透明度值
                ///////////////////////////////////
                UPDATELAYEREDWINDOWINFO  updateinfo = { 0 };
                updateinfo.cbSize = sizeof(UPDATELAYEREDWINDOWINFO);//这个结构的大小,以字节为单位
                updateinfo.hdcDst = hdc;//屏幕DC的句柄。
                updateinfo.pptDst = &pptDst; //分层窗口的新屏幕位置。如果新位置与当前位置不变,则pptDst可以为NULL。
                updateinfo.psize = &psize; //分层窗口的新大小。如果窗口大小不变,该参数可以为NULL。如果hdcSrc为NULL,则psize必须为NULL
                updateinfo.pptSrc = &pptSrc; //设备上下文中图层的位置
                updateinfo.hdcSrc = hDc;//定义分层窗口的表面的DC处理
                updateinfo.crKey = 0;//构成分层窗口时要使用的颜色键
                updateinfo.dwFlags = ULW_ALPHA;//使用pblend作为混合函数
                updateinfo.pblend = &Blend;//构成分层窗口时要使用的透明度值
                updateinfo.prcDirty = prcDirty;//更新区域
                bool bot= UpdateLayeredWindowIndirect(hWnd, &updateinfo);
                ReleaseDC(hWnd, hdc);
                return bot;
        }

分层窗口UpdateLayeredWindowIndirect局部更新




上一篇:2017全球 C++ 及系统软件技术大会11月17日召开
下一篇:C++的MD5加密代码

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

00_avatar_middle
ico_lz  楼主| 密码错误 发表于 2017-11-13 21:14:24 | 显示全部楼层
补充更新区域图片
分层窗口UpdateLayeredWindowIndirect局部更新

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

00_avatar_middle
ico_lz  楼主| 密码错误 发表于 2017-11-14 13:36:09 | 显示全部楼层
版主此贴已沉,请求删除

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

00_avatar_middle
ico_lz  楼主| 密码错误 发表于 2017-11-14 13:36:25 | 显示全部楼层
版主此贴已沉,请求删除

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

71_avatar_middle
online_vip 373012089 发表于 2017-11-14 16:05:39 | 显示全部楼层
好贴,删除什么

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

75_avatar_middle
online_member besteast 发表于 2017-12-8 17:24:58 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-8-15 15:02

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表