关于 Windows 计算器的按钮
为了做一个数字键盘组件,参看了 windows 自带的计算器,发现有点实在不明白
用 spy++ 看了下它的按钮的样式,发现没有 使用 BS_OWNERDRAW,也就是说 不可能是自画的。可它又如何改变 按钮文字的颜色呢? 若处理 WM_CTLCOLORBTN 以设置按钮文字的颜色,按照 MSDN 上说是(没有BS_OWNERDRAW)无效的(我试了,真的无效)。
若不使用 自绘,又有什么办法可以实现 按钮上文字的 多种颜色呢??
用 SDK 实现。
望哪位高手帮帮忙
[解决办法]
帮你顶一下
我没有做过试验,自己从CButton派生一个类,里边设置字体颜色不行么,有时间偶去试试.
[解决办法]
改颜色不需要ownerdraw,也不用派生CButton类
有一个WM_CTLCOLOR消息, 处理一下, 改一下颜色就可以了.
[解决办法]
我觉得 windows 自带的计算器的按钮上可能根本就木有字,而是一堆空白按钮,然后,在按钮的上空用DC(TextOut)画出来的彩色字,这样是最简单的方法。
不信你可以做实验:打开windows 自带的计算器,按下上面的任何一个按钮不放,你会发现按钮上的字并没有随着按钮一起按下,而是保持原样,如果是自绘的按钮,上面的字在按下后会向右下偏移。
[解决办法]
本来不打算回答的, 看来大家讨论的比较热烈, 出来凑个数.
自绘控件不一定非要在WM_CTLCOLORBTN等消息中进行. 其实最好的办法是直接处理WM_PAINT消息, WM_PAINT消息基本上控件绘制的最高控制权, 它只影响控件的外观, 而不影响控件的行为.
WM_PAINT消息不需要设置Owner-draw风格(这个风格很讨厌, 设置了它之后, 像checkbox或radiobutton之类的按钮的选中状态将由程序员自己维护, 也就是说, 按下他们后, 你用CButton::GetCheck来取它的状态, 永远是未选中状态), 你可以自由的在其中绘制控件的外观, 甚至贴图上去, 改个颜色就更简单了.