MFC小项目实践

MFC-动态改变静态文本框颜色

环境: win10、Visual C++ 6.0

实现要求:一共有三个按钮,每个按钮控制一个文本框的颜色,每按下一次,改变一次颜色

过程

  1. 建立工程:建立对话框工程MFC小项目实践
    MFC小项目实践

  2. 为添加对话框添加相应的控件MFC小项目实践

  3. 按钮文本框颜色变化添加消息处理函数

    1、按钮的消息处理函数添加:

    左键双击“开关一”控件则会提示是否生成“”按下按钮“”对应的消息处理函数
    MFC小项目实践
    此处OnButton1为函数名,Message为消息类型,Object ID为控件ID

    2、颜色变化的消息处理函数添加

    1、过程:
    View–》类向导–》选中对话框的ID(我这边是CLightCtlDlg)–》在Messages中选中WM_CTLCOLOR–>点击“Add Function”–》确定
    下方会出现OnCtlColor()这个就是我们需要添加的消息处理函数,我们在Class View中可以看到LightCtlDlg类中出现了OnCtlColor()函数
    MFC小项目实践

    MFC小项目实践

解释:
1、此处颜色变化的消息处理函数添加与按钮(控件)的消息处理函数添加不同,此处颜色变化是实质是对整个对话框进行重绘实现的,所以我们是为对话框添加消息处理函数。而文本框作为对话框中的成员自然也能在这个函数中改变。
2、OnCtlColor ( CDC * pDC , CWnd * pWnd , UINT nCtlColor )函数
的解释可以参考一下MFC修改对话框及控件背景颜色
我这边简单解释一下CDC和CWnd类型的变量的作用:
1、CDC指的是设备描述表的变量类型,这个类包含许多用于设置对象样式的函数(代码中再指出);
2、CWnd为对象的指针,通过指针我们可以获得对象的信息,比如通过按钮的指针获得按钮的ID,或者对对象进行操作
3、为什么不能直接通过对象指针来实现对象样式的改变而非要单独利用另外的类实现对象的样式改变,可能是想把图形操作统一到GDI这个统一的图形设备接口上吧

  1. 编写消息处理函数内容
    1、编写按钮的消息处理函数
    首先我们要为添加一个变量记录按钮按下的“次数”
    在LightCtlDlg.h文件中声明三个变量m_changeX
    MFC小项目实践
    之后在按钮的消息处理函数中添加代码,此处Invalidate()用于每次按下按钮重新通知对话框进行重绘,即触发OnCtlColor()函数,其他两个按钮函数写法雷同。
    MFC小项目实践
    2、编写颜色变化消息处理函数
    首先,想要改变文本框的颜色变化,我们不能直接通过成员函数来设置,必须通过HBRUSH(画刷)来实现,通俗讲就是我们确定刷子的颜色,然后让刷子来给控件上色。因此我们先在LightCtlDlg.h文件中声明画刷
    MFC小项目实践
    声明好刷子后,我们必须对刷子进行初始化(注意:刷子的值确定后就不能再修改,因此我们需要几种颜色就需要利用几个刷子)
    MFC小项目实践
    在声明并且初始化刷子后,我们就可以在OnCtlColor()函数编写文本框的颜色变化,此处注意pDC-> SetBkColor()设置的只是字体占据的那部分空间的背景色,并非文本框整体的颜色。而且如果设置pDC->SetBkMode(TRANSPARENT)即字体背景透明,则pDC-> SetBkColor()失效了MFC小项目实践
    5.最后编译执行效果如下
    MFC小项目实践

小结

临时需要写的一个小东西,以后没有需求应该也不会再用这个工具继续学习了,毕竟都是10几年前的老古董了。如果有需求,还是尝试其他的图形库更好,比如.Net。希望对大家有帮助吧