[MFC] 几种子控件半透明效果的实现办法
什么是“控件半透明效果” ?
如下图所示,美图秀秀中间的四个按钮,边缘四个角都是透明的,呈现出椭圆效果:
熟悉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] 几种子控件半透明效果的实现办法相关推荐
- VC MFC按钮(CButton)控件
VC MFC按钮(CButton)控件 2012年11月11日 19:15 作者:TCEO 分类:技术文章 浏览:4,298 按钮控件 1如何在按钮控件上显示图片 首先确定你要显示在按 ...
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程 开篇语:最近在弄ocx控件发布到asp.net网站上使用,就是用户在使用过程中,自动下载安装ocx控件.(此文章也是 ...
- MFC动态创建控件并响应事件代码实现过程
MFC动态创建控件以及响应动态创建的控件的事件的实现方法如下. 1.创建对象 用new进行动态创建一个对象.然后调用Create函数创建窗口,在函数的父窗口参数中传入this或者用AfxGet ...
- MFC之ComboBox控件用法
本文以实例形式较为详细的讲述了MFC中ComboBox控件的用法.分享给大家供大家参考之用.具体方法如下: 一.ComboBox简介: ComboBox控件是由一个文本输入控件和一个下拉菜单组成的.用 ...
- MFC中的控件是怎么实现的呢?一个按钮就是一个窗口?还是所有按钮画在一个分层窗口上再叠
请教一下MFC中的控件是怎么实现的呢(通过调用什么样的API,传递什么参数)?一个按钮就是一个窗口?还是所有按钮画在一个分层窗口上再叠在主窗口上?还是直接在主窗口上画图? 我想到的是: JavaScr ...
- MFC标签页控件的使用
随笔- 11 文章- 0 评论- 3 MFC标签页控件的使用 1.在对话框中添加一个标签页控件,并为此控件关联一个CTabCtrl类变量m_tabctrl. 2.创建若干个对话框资源作为标签页控件 ...
- MFC下列表控件的使用
MFC下列表控件的使用 2012-11-09 16:46:57| 分类: 程序VC相关 | 标签: |字号大中小 订阅 1.应该加入头文件 #include <Atlbase.h> 2 ...
- MFC如何使控件大小随着对话框大小自动调整
MFC如何使控件大小随着对话框大小自动调整 2012-04-27 16:24:50| 分类: MFC | 标签: |字号大中小 订阅 对话框的大小变化后,假若对话框上的控件大小不变化,看起来会比较 ...
- Silverlight使用DataGrid的模板列(DataGridTemplateColumn)实现类似TreeListView控件的效果
Silverlight使用DataGrid的模板列(DataGridTemplateColumn)实现类似TreeListView控件的效果 转载于:https://www.cnblogs.com/K ...
最新文章
- python之局部变量引用赋值前的结果
- Version 1.3.1_01 of the JVM is not suitable for this product.Version:1.4.1 or greater is required。
- 实验测试2SK241的g-s击穿电压
- w3c java_无法从W3C加载Java类
- 服务器和交换机之间网络协议,网络协议是计算机网络中服务器,计算机,交换机.doc...
- Matrix Decompressing UVA - 11082 最大流 + 输出方案
- js中常用framesetiframe页面跳转传参方法实例大全
- dojo + jersey 上传图片到数据库
- easyUI 数据表格datagrid的使用
- Experimental Release #2: Multiple Device Support
- 硅谷女孩火了,更该让他们开始学编程 1
- Android开发系列(十一) QQ登陆界面——Android控件使用实例
- xyz文件怎么生成三维模型_根据三维空间坐标点如何构建三维模型
- 如何用MATLAB预测未来人口,使用matlab对将来人口总数进行预测
- 双摄像头系列原理深度剖析【转载】
- 2021个人开通抖音小店条件,抖音蓝v有什么好与弊
- 恒大研究院|中国最具发展潜力的100个城市
- 工具 | Windows 功能猎手 (WFH)
- 编码规范与数学之美感想
- CentOS 7安装MySQL集群-GALERA CLUSTER 4 FOR MYSQL 8 RELEASE