什么是“控件半透明效果” ?

如下图所示,美图秀秀中间的四个按钮,边缘四个角都是透明的,呈现出椭圆效果:

熟悉MFC开发的都知道 虽然四个按钮的边缘是椭圆的 实际上椭圆之外的角落 也属于子控件的窗口区域

即:如下图所示 虽然子控件的四个角是椭圆 但是椭圆之外的区域(即黑框与黄框之间的区域) 也属于子控件的窗口区域

很多场景下 需要在子控件的区域显示其父窗口的画面 表现出“子控件的这个区域是透明的”

这个区域的UI如何绘制 就是实现这个UI效果的关键了

实现方法有哪些?

1、纯色背景

这也是最简单的方法 即父窗口的背景色 采用纯色背景  当绘制子控件时 先用对应的纯色FillRect 填充子控件的画布

这个方法简单 但应用场景限制太大:如果父窗口的背景色不是纯色 方法就无效了

2、拷贝父窗口对应区域的dc数据

当绘制子控件时 先拷贝父窗口对应区域的dc数据 用其填充子控件的画布

关键词:GetDC(GetParent())、BitBlt

但是有个问题 多次渲染后 发现子控件上有阴影问题 网上有这个bug的解决办法

解决了阴影的bug 但依旧有使用限制:如果父窗口的背景变化了 子控件无法得到通知 
如何让子控件实时地收到通知? 可以参考CButtonST里面的逻辑 具体我已经忘记了 大家可以自己去看源码)

3、渲染父窗口时 保存父窗口的画布背景

与方法2类似 依旧是画布拷贝 不过此时父窗口的画布获取 不再使用GetDC(GetParent())

具体办法:

a、渲染父窗口时 在父窗口类中 用数据成员HDC m_CanvasCache保存父窗口的背景

b、渲染子控件时 先用父窗口m_CanvasCache对应区域的数据 填充子控件的画布

按照方法3 我自绘了一个边角椭圆的按钮和编辑框 如下图所示:

[MFC] 几种子控件半透明效果的实现办法相关推荐

  1. VC MFC按钮(CButton)控件

    VC MFC按钮(CButton)控件 2012年11月11日 19:15   作者:TCEO   分类:技术文章   浏览:4,298   按钮控件 1如何在按钮控件上显示图片 首先确定你要显示在按 ...

  2. VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程

    VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程 开篇语:最近在弄ocx控件发布到asp.net网站上使用,就是用户在使用过程中,自动下载安装ocx控件.(此文章也是 ...

  3. MFC动态创建控件并响应事件代码实现过程

    MFC动态创建控件以及响应动态创建的控件的事件的实现方法如下. 1.创建对象     用new进行动态创建一个对象.然后调用Create函数创建窗口,在函数的父窗口参数中传入this或者用AfxGet ...

  4. MFC之ComboBox控件用法

    本文以实例形式较为详细的讲述了MFC中ComboBox控件的用法.分享给大家供大家参考之用.具体方法如下: 一.ComboBox简介: ComboBox控件是由一个文本输入控件和一个下拉菜单组成的.用 ...

  5. MFC中的控件是怎么实现的呢?一个按钮就是一个窗口?还是所有按钮画在一个分层窗口上再叠

    请教一下MFC中的控件是怎么实现的呢(通过调用什么样的API,传递什么参数)?一个按钮就是一个窗口?还是所有按钮画在一个分层窗口上再叠在主窗口上?还是直接在主窗口上画图? 我想到的是: JavaScr ...

  6. MFC标签页控件的使用

    随笔- 11  文章- 0  评论- 3 MFC标签页控件的使用 1.在对话框中添加一个标签页控件,并为此控件关联一个CTabCtrl类变量m_tabctrl. 2.创建若干个对话框资源作为标签页控件 ...

  7. MFC下列表控件的使用

    MFC下列表控件的使用 2012-11-09 16:46:57|  分类: 程序VC相关 |  标签: |字号大中小 订阅 1.应该加入头文件 #include <Atlbase.h> 2 ...

  8. MFC如何使控件大小随着对话框大小自动调整

    MFC如何使控件大小随着对话框大小自动调整 2012-04-27 16:24:50|  分类: MFC |  标签: |字号大中小 订阅 对话框的大小变化后,假若对话框上的控件大小不变化,看起来会比较 ...

  9. Silverlight使用DataGrid的模板列(DataGridTemplateColumn)实现类似TreeListView控件的效果

    Silverlight使用DataGrid的模板列(DataGridTemplateColumn)实现类似TreeListView控件的效果 转载于:https://www.cnblogs.com/K ...

最新文章

  1. python之局部变量引用赋值前的结果
  2. Version 1.3.1_01 of the JVM is not suitable for this product.Version:1.4.1 or greater is required。
  3. 实验测试2SK241的g-s击穿电压
  4. w3c java_无法从W3C加载Java类
  5. 服务器和交换机之间网络协议,网络协议是计算机网络中服务器,计算机,交换机.doc...
  6. Matrix Decompressing UVA - 11082 最大流 + 输出方案
  7. js中常用framesetiframe页面跳转传参方法实例大全
  8. dojo + jersey 上传图片到数据库
  9. easyUI 数据表格datagrid的使用
  10. Experimental Release #2: Multiple Device Support
  11. 硅谷女孩火了,更该让他们开始学编程 1
  12. Android开发系列(十一) QQ登陆界面——Android控件使用实例
  13. xyz文件怎么生成三维模型_根据三维空间坐标点如何构建三维模型
  14. 如何用MATLAB预测未来人口,使用matlab对将来人口总数进行预测
  15. 双摄像头系列原理深度剖析【转载】
  16. 2021个人开通抖音小店条件,抖音蓝v有什么好与弊
  17. 恒大研究院|中国最具发展潜力的100个城市
  18. 工具 | Windows 功能猎手 (WFH)
  19. 编码规范与数学之美感想
  20. CentOS 7安装MySQL集群-GALERA CLUSTER 4 FOR MYSQL 8 RELEASE

热门文章

  1. 计算机软件著作权登记指南-计算机软件著作权登记申请表填写说明
  2. 计算机网络--TCP、UDP相关概念
  3. DX200机器人参数
  4. php调用谷歌地图,在php mysql网站中使用谷歌地图api标记
  5. Element-ui中el-tabs的下划线样式微调
  6. python单词软件哪个好_听英语单词软件哪个好
  7. html中如何写新闻题目,用DIV+CSS实现网页排版中新闻列表的制作
  8. 程序员优秀学习资料整理(不断更新中)
  9. 坐标系与参数方程的考向整理【三轮总结】
  10. 公务员面试常见题型及解题思路