[MFC] 几种子控件半透明效果的实现办法
2017-03-30 15:55
591 查看
什么是“控件半透明效果” ?
如下图所示,美图秀秀中间的四个按钮,边缘四个角都是透明的,呈现出椭圆效果:
熟悉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开发的都知道 虽然四个按钮的边缘是椭圆的 实际上椭圆之外的角落 也属于子控件的窗口区域
即:如下图所示 虽然子控件的四个角是椭圆 但是椭圆之外的区域(即黑框与黄框之间的区域) 也属于子控件的窗口区域
很多场景下 需要在子控件的区域显示其父窗口的画面 表现出“子控件的这个区域是透明的”
这个区域的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 我自绘了一个边角椭圆的按钮和编辑框 如下图所示:
相关文章推荐
- WinForm 控件实现半透明效果,并可层叠显示
- 用回车键实现MFC对话框中TAB键控件输入焦点在控件中跳转的效果(转)
- WinForm 控件实现半透明效果,并可层叠显示
- 用回车键实现MFC对话框中TAB键控件输入焦点在控件中跳转的效果
- Android实现在列表List中显示半透明小窗体效果的控件用法详解
- 半透明: MFC实现父窗口不透明,子窗口半透明效果
- 用回车键实现MFC对话框中TAB键控件输入焦点在控件中跳转的效果(转)
- MFC下窗体半透明效果的实现
- iOS_使用UIBezierPath对象实现视图控件的立体阴影效果和半透明背景效果
- MFC开发实用教程1:CListCtrl控件实现Item项拖拽效果
- 用回车键实现MFC对话框中TAB键控制输入焦点在控件中跳转的效果
- 用回车键实现MFC对话框中TAB键控制输入焦点在控件中跳转的效果
- MFC进度条控件CProgressCtrl实现进度滚动效果
- 用回车键实现MFC对话框中TAB键控制输入焦点在控件中跳转的效果
- mfc中如何实现窗体半透明 但是控件不透明
- 制作自定义WmlListAdapter来实现Mobile.List控件的各种效果
- CSS opacity - 实现图片半透明效果
- Select控件实现联动效果
- 在Windows Mobile上实现显示图片半透明的效果
- JS脚本实现日历的控件效果