【发布时间】:2014-09-04 21:47:23
【问题描述】:
所以我已经使用 MFC 几年了,并制作了包括自定义控件在内的各种界面。我最近被要求开始制作一个可以动态设置背景和文本颜色的界面。我开始着手解决这个问题,并且遇到了让我的一些自定义控件正常运行的问题。所有生成 WM_CTLCOLOR 消息的控件都可以很好地使用该接口来允许父控件设置子控件的颜色,但并非我自定义的所有控件都生成这些消息。特别是我基于 CTabCrtl 和一些基于 CWnd 构建的类。这些类在调用绘画之前似乎不会生成 WM_CTLCOLOR 消息。我想知道是否有人对如何获取控件父 CWnd 的背景和文本颜色或如何手动创建 WM_CTLCOLOR 消息有任何想法。我试图获取控件父级的当前 DC,因此我可以调用 GetBkColor() 和 GetTextColor() 但这样做似乎总是返回默认值。我也尝试过创建 WM_CTLCOLOR 消息,但不知道应该在哪里创建它们或确切的语法。任何帮助都会很棒。
【问题讨论】:
-
许多常用控件支持通过
WM_NOTIFY/NM_CUSTOMDRAW进行自定义 -
根据您所针对的控件,您可能会发现从 VS2008 SP1 出现的 MFC Feature Pack 有一些有用的补充。例如CMFCListCtrl 具有设置前景/背景单元格颜色的覆盖。