MFC自定义控件背景/文本颜色

时间:2014-07-14 20:44:50

标签: c++ mfc

所以我已经使用了MFC几年,并制作了包括自定义控件在内的各种界面。我最近被要求开始制作一个可以动态设置背景和文本颜色的界面。我开始研究这个问题并且遇到了一些让我的自定义控件运行起来的问题。生成WM_CTLCOLOR消息的所有控件都可以很好地使用该接口来允许父级设置子控件的颜色,但不是我自定义的所有控件都生成这些消息。特别是我用CTabCrtl构建的一个类和一些基于CWnd的类。这些类在调用绘制之前似乎不会生成WM_CTLCOLOR消息。我想知道是否有人对如何获取控件父CWnd的背景和文本颜色或如何手动创建WM_CTLCOLOR消息有任何想法。我试图获取控件父级的当前DC,因此我可以调用GetBkColor()和GetTextColor(),但这样做似乎总是返回默认值。我也尝试创建WM_CTLCOLOR消息,但不知道我应该在哪里创建它们或确切的语法..任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

WM_CTLCOLOR的想法是必须从WM_PAINT和WM_ERASEBKGND中调用。 在这种情况下,你有一个DC。您将消息发送给父级,然后获得画笔并设置文本和背景颜色。

我只看到一个主要问题,即WM_CTLCOLOR不是真正的窗口消息......它只是与SDK中描述的各种WM_CTLCOLOR ...消息同步。

因此MSDN中记录了语法。 将DC句柄转换为WPARAM并将窗口句柄转换为LPARAM ...