因此,我已经使用MFC几年了,制作了包括自定义控件在内的各种界面。最近有人要求我开始制作一个可以动态设置背景和文本颜色的界面。我开始研究此问题,并且遇到了使某些自定义控件无法正常运行的问题。使用该接口,所有生成WM_CTLCOLOR消息的控件都可以很好地工作,以允许父级设置子级控件的颜色,但是并非我自定义的所有控件都会生成这些消息。具体来说,我是基于CTabCrtl建立的一个类,还有一些基于CWnd的类。这些类在调用绘画之前似乎不会生成WM_CTLCOLOR消息。我想知道是否有人对如何获取控件父级CWnd的背景和文本颜色或如何手动创建WM_CTLCOLOR消息有任何想法。我试图获取控件父级的当前DC,以便可以调用GetBkColor()和GetTextColor(),但这样做似乎总是返回默认值。我也尝试过创建WM_CTLCOLOR消息,但不知道我应该在哪里创建它们或确切的语法。任何帮助都将非常有用。
WM_CTLCOLOR的想法是必须从WM_PAINT和WM_ERASEBKGND内部调用。在这种情况下,您将拥有DC。您将消息发送给父级,然后获得画笔,并设置了文本和背景色。
我只看到一个主要问题,即WM_CTLCOLOR不是真正的窗口消息...它只是从SDK中描述的各种WM_CTLCOLOR ...消息中合成的。
因此,该语法已在MSDN中进行了记录。将DC手柄投射到WPARAM上,将窗口手柄投射到LPARAM ...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句