当前位置:C++技术网 > 资讯 > 控件修改颜色和控件自绘的区别分析

控件修改颜色和控件自绘的区别分析

更新时间:2016-02-16 17:18:06浏览次数:1+次

    在《静态控件颜色修改WM_CTLCOLORSTATIC消息原理分析图解》一文中,学习了static静态控件颜色的修改。通过执行的过程图,我们可以很清楚的看到,最终的绘制,是在控件内部的窗口过程中完成的。我们在响应WM_CTLCOLORSTATIC消息时设置了DC的文字的颜色、文字的背景颜色以及传回画刷,这样静态控件就是用我们设置好的参数来绘制,从而达到我们修改控件颜色的目的。这就好比我们是画家的助手,画家要画画的时候,我们给画家递不同的画笔和颜料,画家画出的颜色就不同。然而我们并不能直接画画,所以,对于这样的改变,是有限的。我们肯定是事先和画家商量好的,画家同意让我们随意改变颜色。如果画家不同意这个做法,我们就无法改变颜色了。要改变别人的意愿,人家做出了一点让步还是好说的,但是如果要改的面目全非,完全按照你的想法画,那画家肯定不干了。
    在文章《控件自绘的原理流程图解深入浅出分析》中,我们也详细分析了控件自绘的原理流程。我们发现,控件自绘我们掌握了控件绘制的完全的控制权。而我们绘制需要的东西,都是控件给我们提供的。对于控件颜色的修改原理流程,过程刚好相反。在修改控件颜色的时候,我们提供颜色设置,不能绘画。而在控件自绘的时候,控件给我们提供需要的环境和工具(矩形大小、DC句柄等),我们用这些就可以很好的完成绘制。此时我们就是一个画家了。角色发生了逆转!
    修改控件颜色时,父窗口充当助手,控件充当画家。而控件自绘时,父窗口充当画家,控件充当助手。父窗口的代码由程序员写,所以控件自绘时程序员可以完全控制控件的界面。
    不管是修改控件颜色,还是控件自绘,都是完成控件重绘的目的。他们目的是一样的。对于程序员来讲,两种方式开放的绘制功能范围不同。修改颜色则只能处理颜色,而控件自绘不仅可以处理颜色,还可以修改文字、根据不同的状态输出不同的界面。
    修改控件颜色相当于只是给程序员开了一个小口子,而控件自绘则对程序员完全打开了大门。如果我们只是想修改一下控件的颜色,那么就不必用控件自绘了。当然,下压按钮的颜色修改不起作用,可以参考文章《WM_CTLCOLORBTN消息就是一个摆设》,这种情况下,还是要用按钮的自绘技术。
    虽然说控件自绘给程序员带来了更多的控制权,同时我们也要明白,程序员要做的事情就更多了,责任也多了。控件自绘时,控件的单击和未单击的界面效果都需要由程序员负责处理。此时就不要幻想系统有默认的界面。你需要负责所有的绘制工作。
    按钮自绘,也就选择当了画家,我们在心理上也就要成为画家的心理,而不能用屌丝的心理干画家干的事。为什么要这么说呢?
    我们使用SetWindowText修改文字来实现文字的输出。这并没有什么问题。但是,在自绘按钮时,不要再用这个函数来修改正在自绘的按钮文字哦。不仅干不好,还要闯出大祸来。你可以看看文章《控件自绘大忌:不能使用SetWindowText修改正在自绘的控件文字》的分析。
    既然你是画家了,控件就只是一个画板了。在你作画之前,控件就是空白的。而你所要做的,就是完全自己去绘制了。屌丝的心理就是借助某个工具快速修改一下,但是又想完全控制。这是不现实的。当你完全控制的时候,所有的工作都需要你自己从头干起。一般屌丝也就是这样,当用工具干一件事的时候,干的非常爽,然后就装逼了,自我感觉特别好。然后也告诉自己,需要进一步努力了,然后就从专业的角度去学习,结果发现,进入了另外一个世界,之前工具玩的都不能用了,要完全从0开始。然后屌丝们都很失望伤心,然后发现不感兴趣了。要么再退回使用工具的环境,但是自己的心理阴影再也抹不去了,感觉再玩再炫耀纯粹就是侮辱自己。
    学习技术的过程也能发现做人的道理。当你完全掌控一个东西的时候,你也有更多的责任。如果你在完全掌控一个东西的时候,能够将它玩的更好,而且也有兴趣玩,那你就是真感兴趣,否则就是假的,自欺欺人。
    说了这么多,其实就是告诉你一个道理,完成角色的变化,否则就怎么也玩不好控件自绘的。