您的位置:程序门 -> vc/mfc -> 界面



关于 windows 计算器的按钮


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


关于 windows 计算器的按钮[已结贴,结贴人:fvan]
发表于:2007-02-05 21:56:35 楼主
为了做一个数字键盘组件,参看了   windows   自带的计算器,发现有点实在不明白

用   spy++   看了下它的按钮的样式,发现没有   使用   bs_ownerdraw,也就是说   不可能是自画的。可它又如何改变   按钮文字的颜色呢?   若处理   wm_ctlcolorbtn   以设置按钮文字的颜色,按照   msdn   上说是(没有bs_ownerdraw)无效的(我试了,真的无效)。

若不使用   自绘,又有什么办法可以实现   按钮上文字的   多种颜色呢??

用   sdk   实现。

望哪位高手帮帮忙
发表于:2007-02-05 22:08:261楼 得分:10
帮你顶一下

我没有做过试验,自己从cbutton派生一个类,里边设置字体颜色不行么,有时间偶去试试.
发表于:2007-02-05 22:23:332楼 得分:20
改颜色不需要ownerdraw,也不用派生cbutton类
有一个wm_ctlcolor消息,   处理一下,   改一下颜色就可以了.
发表于:2007-02-05 22:27:543楼 得分:0
bs_ownerdraw

怎么用啊???
发表于:2007-02-05 22:30:164楼 得分:0
有一个wm_ctlcolor消息,   处理一下,   改一下颜色就可以了.

如果你是用对话框来做的话,在对话框的类里响应这个消息,再判断是哪个控件,接着变颜色就可以了。

bs_ownerdraw

怎么用啊???
你需自己写重绘代码和消息处理,不是一两句能说清的。去找些别人的代码看下。
发表于:2007-02-05 22:40:185楼 得分:0
好的  

谢谢
发表于:2007-02-05 22:49:156楼 得分:0
不要忘了结帖。哈。我要再升一个裤叉啊。
发表于:2007-02-05 23:03:127楼 得分:0
请参考我回答过的一个帖子:

http://community.csdn.net/expert/topic/5136/5136355.xml?temp=.7726709
发表于:2007-02-06 08:58:308楼 得分:50
我觉得   windows   自带的计算器的按钮上可能根本就木有字,而是一堆空白按钮,然后,在按钮的上空用dc(textout)画出来的彩色字,这样是最简单的方法。
不信你可以做实验:打开windows   自带的计算器,按下上面的任何一个按钮不放,你会发现按钮上的字并没有随着按钮一起按下,而是保持原样,如果是自绘的按钮,上面的字在按下后会向右下偏移。
发表于:2007-02-06 16:59:249楼 得分:0
有一个wm_ctlcolor消息,   处理一下,   改一下颜色就可以了.

如果你是用对话框来做的话,在对话框的类里响应这个消息,再判断是哪个控件,接着变颜色就可以了。
--------------------------------------------

wm_ctlcolor   是   mfc   定义的,sdk里面哪有啊?而且也只是对   wm_ctlcolorbtn   和   wm_ctlcolordlg   等消息的统一定义吧。
若不使用   ownerdraw   ,难道就没有其他可能途径了?  

windows   计算器又是如何实现的啊(估计也不是用ownerdraw)?看来微软的东西还是值得研究研究的。
发表于:2007-02-06 17:09:2410楼 得分:0
我觉得   windows   自带的计算器的按钮上可能根本就木有字,而是一堆空白按钮,然后,在按钮的上空用dc(textout)画出来的彩色字,这样是最简单的方法。
不信你可以做实验:打开windows   自带的计算器,按下上面的任何一个按钮不放,你会发现按钮上的字并没有随着按钮一起按下,而是保持原样,如果是自绘的按钮,上面的字在按下后会向右下偏移。

--------------------------------------------
我决定你说得   有点道理,我也想过和试过

我是这样作的   ,对   wm_ctlcolorbtn   进行处理,
设置   dc   的颜色,然后   textout   ,可仍热画出来的是   黑的(系统默认)

据   msdn   上对   wm_ctlcolorbtn   总会使用系统默认的颜色绘制前景色,所以好像也不太行,不知你又觉得如何做?

发表于:2007-02-06 23:08:3811楼 得分:0
up
发表于:2007-02-07 17:21:3112楼 得分:20
本来不打算回答的,   看来大家讨论的比较热烈,   出来凑个数.
自绘控件不一定非要在wm_ctlcolorbtn等消息中进行.   其实最好的办法是直接处理wm_paint消息,   wm_paint消息基本上控件绘制的最高控制权,   它只影响控件的外观,   而不影响控件的行为.
wm_paint消息不需要设置owner-draw风格(这个风格很讨厌,   设置了它之后,   像checkbox或radiobutton之类的按钮的选中状态将由程序员自己维护,   也就是说,   按下他们后,   你用cbutton::getcheck来取它的状态,   永远是未选中状态),   你可以自由的在其中绘制控件的外观,   甚至贴图上去,   改个颜色就更简单了.
发表于:2007-02-07 20:04:1713楼 得分:0

终于知道,其实   windows   计算器   也只是   系统   画完按钮之后,再上面   textout   一层字,处理父窗体的消息就能实现。这也是一招啊,只是不常用罢了。
多谢   dazedase   给了个提示


快速检索

最新资讯
热门点击