如何改变以button类创建的窗口控件的颜色(在WIN32asm编程中)

kgduwu 2008-11-15 11:47:54
我在WIN32asm需要改变以button类创建的窗口控件的颜色,没有找到相应的API函数,超类化button类来创建一个新类来改变 WndClassex.hbrBackground的背景色以期创建改变了颜色的窗口控件也不成功,大家指导指导,给俺说说有啥法子能实现我要的功能!!!
...全文
237 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
kgduwu 2008-11-21
  • 打赏
  • 举报
回复
我是要主动刷新,并不是需要鼠标点击该控件后才刷新该控件,例如控件上有字如Y,你在程序中按Y键后该控件(如调用:invoke CreateWindowEx,WS_EX_WINDOWEDGE,offset szbutton,offset szbuttonx0y7,\
WS_CHILD or WS_VISIBLE,\
315,1,42,25,\
hWnd,8,hInstance,NULL在父窗口hWnd中创建的控件)背景色将改为另一种颜色
xiaopoy 2008-11-21
  • 打赏
  • 举报
回复
好吧,第九章也该看看:

用SetSysColors来改变按钮的外观可能不是您想做的,这会影响目前在Windows下执行的所有程序,这也是使用者不太喜欢的。
更好的方法(同样也只是理论上)是处理WM_CTLCOLORBTN消息,这是当子窗口即将为其显示区域着色时,由按钮控件发送给其父窗口消息处理程序的一个消息。父窗口可以利用这个机会来改变子窗口消息处理程序将用来着色的颜色(在Windows的16位版本中,一个称为WM_CTLCOLOR的消息被用于所有的控件,现在针对每种型态的标准控件,分别代之以不同的消息)。
当父窗口消息处理程序收到WM_CTLCOLORBTN消息时,wParam消息参数是按钮的设备内容句柄,lParam是按钮的窗口句柄。当父窗口消息处理程序得到这个消息时,按钮控件已经获得了它的设备内容。当您的窗口消息处理程序处理一个WM_CTLCOLORBTN消息时,您必须完成以下三个动作:
使用SetTextColor选择设定一种文字颜色。
使用SetBkColor选择设定一种文字背景颜色。
将一个画刷句柄传回给子窗口。
理论上,子窗口使用该画刷来着色背景。当不再需要这个画刷时,您应该负责清除它。
下面是使用WM_CTLCOLORBTN的问题所在:只有按键和拥有者绘制按钮才给其父窗口发送WM_CTLCOLORBTN,而只有拥有者绘制按钮才会响应父窗口消息处理程序对消息的处理,而使用画刷来着色背景。这基本上是没有意义的,因为无论怎样都是由父窗口来负责绘制拥有者绘制按钮。

超类化button类来创建一个新类来改变 WndClassex.hbrBackground的背景色,不成功的表示该是颜色改变但不是自己想要的结果吧?
cnzdgs 2008-11-16
  • 打赏
  • 举报
回复
给按钮加上BS_OWNERDRAW风格,响应WM_DRAWITEM消息,自己绘制按钮。
qap22 2008-11-16
  • 打赏
  • 举报
回复
??
invaliddescriptor 2008-11-16
  • 打赏
  • 举报
回复
oo
qap22 2008-11-16
  • 打赏
  • 举报
回复
oo
IDWB 2008-11-16
  • 打赏
  • 举报
回复
OllyDBG 入门教程(多模式版) 第一卷 第7篇
xiaopoy 2008-11-16
  • 打赏
  • 举报
回复
你需要再看一遍
Windows程序设计.chm
第五章

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧