设置超级列表框控件的文本和背景颜色

时间:2014-12-05 19:26:17

标签: winapi user-interface common-controls

我正在编写Windows LISTBOX通用控件的超级版本以添加额外功能。

标准控件将WM_CTLCOLORLISTBOX消息发送到其父级,允许在运行时在适当的消息处理程序中指定其文本和背景颜色。但是WM_CTLCOLORLISTBOX不会发送到控件本身,因此无法在内部进行封装和处理。

我试图解决的方案是根据控件的启用/禁用状态更改背景和文本颜色。将列表框背景留下相同阴影的标准行为,无论其状态如何,都看起来很丑陋,与我不一致。是否有另一种方法可以在封装中设置这些值,然后将所有其他绘制任务移交给基类窗口过程?

我想知道如何使用SetClassLongPtr()。但是,这不仅不会解决文本颜色,而且如果我理解正确,它将改变当前存在的该类的所有控件的背景,而不是状态已更改的特定控件。

1 个答案:

答案 0 :(得分:0)

答案应该是显而易见的 - 因为WM_CTLCOLORLISTBOX被发送到窗口,您必须继承窗口以便接收消息。没有绕过那个。但是,一些包装器UI框架(如VCL)旨在将此类消息转发到随后生成的控件,因此控件可以处理自己的消息。但是,如果您没有使用包装器框架并且直接使用Win32,则必须自己处理父消息。有关子类化给定HWND的详细信息,请参阅MSDN:

Subclassing Controls