ExcludeClipRect和无闪烁图像
- case WM_PAINT:
- {
- hdc = BeginPaint(hWnd, &ps);
- RECT rc = {0};
- GetClientRect (hWnd, &rc) ;
- HDC hMemDC = CreateCompatibleDC(ps.hdc);
- SelectObject(hMemDC, g_hBmpAllWstDskWallpaper);//选择位图
- //ExcludeClipRect(ps.hdc,0,0,200,100); //排除部分区域. A line
- BitBlt(ps.hdc,0,0,300,200,hMemDC,0,0,SRCCOPY);
- DeleteDC(hMemDC);
- EndPaint(hWnd,&ps);
- }
- BOOL g_bCall = TRUE;//全局变量.
- if (g_bCall)
- {
- g_bCall = FALSE;
- ExcludeClipRect(ps.hdc,0,0,200,100); //排除部分区域,仅调用一次. A line
- }
- #define RECT_WIDTH(rt) (rt.right-rt.left)
- #define RECT_HEIGHT(rt) (rt.bottom-rt.top)
- RECT g_rcExclud = {0};
- BOOL g_bCancelExcludeRect = FALSE;
- case WM_PAINT:
- {
- hdc = BeginPaint(hWnd, &ps);
- RECT rc = {0};
- GetClientRect (hWnd, &rc) ;
- HDC hMemDC = CreateCompatibleDC(ps.hdc);
- SelectObject(hMemDC, g_hBmpAllWstDskWallpaper);//选择位图
- // "exclud"掉的区域在右下角.
- g_rcExclud.left = rc.right-200;
- g_rcExclud.top = rc.bottom-100;
- g_rcExclud.right = rc.right;
- g_rcExclud.bottom = rc.bottom;
- HRGN hrgn = NULL; // 将上次"exclud"掉的区域填补回来.
- if (g_bCancelExcludeRect && RECT_WIDTH(g_rcExclud) && RECT_HEIGHT(g_rcExclud))
- {
- hrgn = CreateRectRgn(g_rcExclud.left, g_rcExclud.top, g_rcExclud.right, g_rcExclud.bottom);
- ExtSelectClipRgn(ps.hdc, hrgn, RGN_OR);
- FillRect(ps.hdc,&g_rcExclud,(HBRUSH)GetStockObject(COLOR_WINDOW));//擦除上次绘制的图片区域.
- }
- (!g_bCancelExcludeRect) //"exclud"掉窗口右下角区域.
- ExcludeClipRect(ps.hdc,g_rcExclud.left, g_rcExclud.top, RECT_WIDTH(g_rcExclud), RECT_HEIGHT(g_rcExclud));
- BitBlt(ps.hdc,0,0,400,300,hMemDC,0,0,SRCCOPY);//在右下角绘制一个位图.
- DeleteDC(hMemDC);
- if (hrgn != NULL) DeleteObject(hrgn);
- EndPaint(hWnd,&ps);
- }
- case WM_PAINT:
- {
- hdc = BeginPaint(hWnd, &ps);
- RECT rc = {0};
- GetClientRect (hWnd, &rc) ;
- HDC hMemDC = CreateCompatibleDC(ps.hdc);
- SelectObject(hMemDC, g_hBmpAllWstDskWallpaper);
- HRGN hrgn = NULL;
- if (RECT_WIDTH(g_rcExclud) && RECT_HEIGHT(g_rcExclud))
- {
- hrgn = CreateRectRgn(g_rcExclud.left, g_rcExclud.top, g_rcExclud.right, g_rcExclud.bottom);
- ExtSelectClipRgn(ps.hdc, hrgn, RGN_OR);//恢复上次被"excude"掉的区域,必须的,否则这一部分不会被绘制.
- FillRect(ps.hdc,&g_rcExclud,(HBRUSH)GetStockObject(COLOR_WINDOW));//擦除上次绘制的图片区域.
- }
- g_rcExclud.left = rc.right-300;
- g_rcExclud.top = rc.bottom-200;
- g_rcExclud.right = rc.right;
- g_rcExclud.bottom = rc.bottom;
- BitBlt(ps.hdc,g_rcExclud.left,g_rcExclud.top,g_rcExclud.right-g_rcExclud.left,g_rcExclud.bottom-g_rcExclud.top,hMemDC,0,0,SRCCOPY);
- ExcludeClipRect(ps.hdc,g_rcExclud.left,g_rcExclud.top, g_rcExclud.right, g_rcExclud.bottom);//排除掉图像所占据的区域
- FillRect(ps.hdc,&rc,(HBRUSH)GetStockObject(COLOR_WINDOW));// 用窗口背景色绘制其余区域.
- DeleteObject(hrgn);
- DeleteDC (hMemDC) ; //释放内存设备环境
- EndPaint(hWnd, &ps);
- return 0;
- }
- break;
- case WM_SIZE:
- InvalidateRect(hWnd, NULL, FALSE);//最后一个参数为FALSE,表示不用擦除背景.
- break;
转载于:https://blog.51cto.com/jetyi/642401
ExcludeClipRect和无闪烁图像相关推荐
- VC++大数据量绘图时无闪烁刷屏技术实现
引言 当我们需要在用户区显示一些图形时,先把图形在客户区画上,虽然已经画好但此时我们还无法看到,还要通过 程序主动地刷新用户区,强制Windows发送一条WM_PAINT消息,这将引发视类OnDraw ...
- Qt组件中的双缓冲无闪烁绘图
双缓冲绘图 在Qt4中,所有的窗口部件默认都使用双缓冲进行绘图.使用双缓冲,可以减轻绘制的闪烁感.在有些情况下,用户要关闭双缓冲,自己管理绘图.下面的语句设置了窗口部件的Qt::WA_PaintOnS ...
- Hook源码+插件化实现无闪烁换肤
现在的移动端应用,在实现功能需求的同时,还会在用户体验上进行突破,以增加用户黏性.例如,很多场景都加入了日/夜间主题切换,或者类似于网易云音乐的换肤.那么,当我们碰到类似的需求时,应该怎么来实现呢?更 ...
- 四大指标超现有模型!少样本的无监督图像翻译效果逆天| 技术头条
作者 | Ming-yu Liu, Xun Huang, Arun Mallya, Tero Karras, Timo Aila, Jaakko Lehtinen 译者 | linstancy 编辑 ...
- Github大热论文 | U-GAT-IT:基于GAN的新型无监督图像转换
作者丨武广 学校丨合肥工业大学硕士生 研究方向丨图像生成 生成对抗网络(GAN)在这几年的发展下已经渐渐沉淀下来,在网络的架构.训练的稳定性控制.模型参数设计上都有了指导性的研究成果.我们可以看出 1 ...
- 用ajax技术实现无闪烁定时刷新页面
在Web开发中我们经常需要实现定时刷新某个页面:1.来保持session的值或者检查session的值是否为空(比如说防止同一用户重复登录):2.实现实时站内短信:3.定时更新页面数据等等.但是我们在 ...
- 无闪烁刷新页面 php,AJAX_Ajax实现无闪烁定时刷新页面实例代码,在Web开发中我们经常需要实现 - phpStudy...
Ajax实现无闪烁定时刷新页面实例代码 在Web开发中我们经常需要实现定时刷新某个页面: 1.来保持session的值或者检查session的值是否为空(比如说防止同一用户重复登录): 2.实现实时站 ...
- “用于无监督图像生成解耦的正交雅可比正则化”论文解读
Tikhonov regularization terms https://blog.csdn.net/jiejinquanil/article/details/50411617 本文是对博客http ...
- Delphi用ini文档实现界面无闪烁多语言转换
越来越多的程序使用了多国语言切换,虽然DELPHI自带多语言包的添加和配置, 但是那种方法在切换语言时界面会出现闪烁,而且实现起来很麻烦,这里我介绍给大家的是利用INI文件来读取界面的语种文字, ...
最新文章
- 华中科技大学 教学大纲 计算机,教学大纲-华中科技大学计算机学院
- cdh 安装_使用Cloudera的CDH部署Hadoop:第三步,安装管理平台和数据库
- android 紧急号码没记录,android – 当呼叫被隐瞒/未知时,来电号码是...
- 关于两个php.ini的说明
- 攻城狮危险:波士顿动力机器狗去福特当工程师了!
- 前端学习(3024):vue+element今日头条管理-关于默认子路由的问题
- python mysql实例_Python使用MySQL数据库的方法以及一个实例
- 自定义AlertDialog控件的使用(AndroidStudio)
- 全网最全的IDEA热部署方案,看完弄懂,再也不用加班了~
- 正则表达式:基础知识学习
- 舒尔特注意力训练表格_用微信小程序里训练提升你的专注力
- visio2019 专业版,两种方法
- snipaste如何滚动截图_3款工具满足你对截图软件的所有想象
- 关注C-RAN 的五大理由
- VUE框架应用包---------微信二维码应用
- excel提取数字的方法
- vb.net(C#)调用CAD并画图
- 电压源电流源电路符号及2B法
- Flex布局——flex-basis、flex-grow、flex-shrink
- 7-36 复数四则运算 (15 分)【简化版】