if(nCtlColor==CTLCOLOR_EDIT)
{
pDC->SetBkColor(RGB(0,0,255));
pDC->SetTextColor(RGB(255,0,0));
}
if(nCtlColor==CTLCOLOR_LISTBOX)
{
pDC->SetBkColor(RGB(0,0,255));
pDC->SetTextColor(RGB(198,198,0));
}
CBrush brush;
brush.CreateSolidBrush(RGB(128,128,128));
return brush;
但是当用OnCtlColor函数改变控件的颜色时,对话框中所有的控件的背景颜色都变成同一颜色,这是不希望出现的,因此需要采用其它方法来实现单个控件的颜色化即能够单独控制每个控件的前、背景颜色,例如编辑框与列表框的背景色不一样,且它们的前景颜色也都不一样。为了解决这一问题,通过查看帮助,查找相关资料,发现可以使用控件的消息映射机制(这种功能只在4.0以上的版本中才有),即将消息映射WM_CTLCOLOR改成WM_CTLCOLOR_REFLECT,生成的函数与前面的函数重名,但少了一个参数,这个参数就是指向窗口的指针,其函数声明为:CtlColor(CDC*
pDC, UINT nCtlColor),函数返回值仍然还是一个画刷句柄,但是返回的画刷是用来重绘控件本身的背景,而不是重绘整个对话框的背景,这样可以通过派生一个类,这个类的基类是控件类,例如CButton,然后编写其消息映射所对应的函数OnCtlColor(),可以为新生成的类添加两个变量,一个是前景颜色变量,一个是背景颜色变量。另外,我们定义一个画刷对象的实例。这样我们在编写完新生成的类后,可以通过前、背景颜色变量来动态改变控件的前、背景颜色,从而实现对单个控件的控制。
1.2重载类成员函数的分析... ... ... ...
... ... ... ...
【论文说明】该论文包含算法流程图和代码,Word格式,文件大小175K,字数1.3万,计算机论文,专业性强。