最近在做一个驱动控制系统测试软件Driver Control System,其有6个通道能够读取6路编码器的数据,并分别用不同颜色的线条把数据绘制出来。我想为每个通道设计一个控件,用户可以点击该控件,就能弹出颜色对话框,用户选择某个颜色后,该控件的颜色能变更为所选择的颜色。
采用的方案是在对话框面板上添加6个图片控件(Picture Control),给每个图片控件都添加单击消息响应函数,在函数中调用ChangeEncColor()函数。其中ChangeEncColor函数即为修改图片控件颜色的函数,其参数为通道序号。在该函数中,首先用MFC的颜色对话框类CColorDialog定义了颜色对话框对象,其构造函数的参数是一个COLORREF结构体,在这里输入对应通道的初始化颜色,即m_clrEnc[nIndex];接着设置颜色对话框为完全展开状态,定义一个矩形类CRect对象rectColor用来获取图片控件的矩形区域;创建一个新的画刷对象以及一个一个画刷对象指针用来保存旧的画刷地址;获取图片控件m_picEnc[nIndex]的DC,并转换成客户区DC类型CClientDC。接着以模态对话框的形式显示颜色对话框,如果用户选择了颜色对话框其中一个颜色,并点击了确定按钮,则进入if语句内部。
void CDriverControlSystemDlg::ChangeEncColor(unsigned char nIndex)
{
//! 构造颜色对话框
CColorDialog dlgColor(m_clrEnc[nIndex]);
//! 颜色对话框完全展开
dlgColor.m_cc.Flags |= CC_FULLOPEN;
//! 图片控件的矩形区域坐标
CRect rectColor;
//! 创建新的画刷
CBrush newBrush;
//! 保存旧画刷