我现在正在编写自己的CStatic子类,我对如何更改其背景颜色感到困惑。
根据以前的经验,我习惯用我想要的颜色对“CTLCOLORSTATIC”消息作出反应。
但是,这是我目前的子类:
class LocationPane : public CWindowImpl<LocationPane, CStatic>
{
DECLARE_WND_CLASS(L"LocationPane");
public:
BEGIN_MSG_MAP_EX(LocationPane)
MSG_WM_PAINT(OnPaint)
MSG_WM_CTLCOLORSTATIC(OnCtlColorStatic);
END_MSG_MAP()
LocationPane();
~LocationPane();
private:
HBRUSH OnCtlColorStatic(CDCHandle cd, CWindow wnd);
//Paint routine
void OnPaint(CDCHandle dc);
};
我试着听取上述信息,但我根本没有收到。我确实收到了油漆信息,所以我不能责怪我的自定义控件根本不工作。
尝试处理绘图程序中的背景颜色是否是合法的解决方案?我真的不喜欢这样解决它,但我没有收到我曾经使用的其他消息。
如果需要额外的代码,请随时提出,我很乐意为您提供额外的资源。
提前致谢。
答案 0 :(得分:4)
我认为您希望在托管您控件的父窗口中捕获WM_CTLCOLORSTATIC
。当您想要文本控件时,通常用于具有不同背景颜色。
但如果要覆盖WM_PAINT,也可以让OnPaint绘制背景颜色。