MFC|实现自定义复选框效果
什么叫做复选框?
复选框是一种可同时选中多项的基础控件,主要是有两种明显的状态:选中与非选中。
在我们实际开发过程中,单纯的系统边框已经无法满足对界面显示需求了,这时需要采用自定义图片进行展示,那么展示效果是如何呢?
对于我们 MFC 框架来说,想要实现一个自定义的控件很难,一般情况下采用自绘的方式实现。对于 Check 控件来说,也是如此。
功能实现
复选框父类:CButton
当我们从资源视图中拖出来一个控件并绑定成员变量后,当前复选框的父类便是 CButton。
这里,假设自绘的复选框类名称叫做:UICustomCheck
继承后的类框架是:
前几章我也曾经说过,MFC 中控件的自绘无外乎两种情况:OnPaint 自绘以及 DrawItem 自绘。
针对于复选框控件来说,是需要在 OnPaint 自绘的。
思路:根据选中的两种状态,分别显示不同的图片。
第一种情况(未选中状态),展示未选中状态图片;第二种情况(选中状态),展示选中状态图片
代码讲解:
m_bState 是一个 bool 值变量,0:未选中状态;1:选中状态
当用户设置状态更换时,此时需要更新 m_bState 值的数据。所以说,这里用到了函数重写功能
该函数是属于 CButton 的内部函数,为了在用户设置选中状态时更新图片,此时,就需要重写该函数。
还有一种情况,用户不手动设置 SetCheck 函数改变状态,只是点击控件,自动更新状态,那么该如何实现呢?
在我们自绘过程中,每个自绘控件都会有鼠标的点击消息,为了实现多次点击更换图片的状态,一般都会使用 OnLButtonDown 或者是 OnLButtonUp 两个消息进行设置。
这里,我是重写的 OnLButtonUp 消息,鼠标抬起后更新显示状态
代码讲解:
每次更换图片时,不确定用户使用的是否是异形图片,所以,在更换状态时都需要获取父窗口中当前控件对应的区域,进行强制刷新。
到这里,复选框的图片替换功能就讲解结束了,功能简单,主要是在 OnPaint 中的绘制,以及刷新问题。
我是中国好公民 st,一名 C++开发程序猿~
版权声明: 本文为 InfoQ 作者【中国好公民st】的原创文章。
原文链接:【http://xie.infoq.cn/article/f748f45b6046901dedf14d3f1】。文章转载请联系作者。
评论