gpt4 book ai didi

visual-c++ - CStatic 未收到 WM_CTLCOLOR

转载 作者:行者123 更新时间:2023-12-02 15:35:33 24 4
gpt4 key购买 nike

我想我在这里遗漏了一些小东西。

我正在尝试创建一个继承自 CStatic 且具有透明背景的类。我设法创建了该类的一个实例,它显示在父 CView 中。但是,当我添加一个 OnCtlColor 消息处理程序通过 Visual Studio 上的类 View 以使背景透明时,它永远不会触发。

这是一个代码片段:

Foo.h

class Foo: public CStatic
{
DECLARE_DYNAMIC(Foo)

public:
Foo();
virtual ~Foo();
virtual void CreateCtrl(CWnd * Parent, POINT TopLeft, SIZE sz);

protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
};

Foo.cpp

void Foo::CreateCtrl(CWnd * Parent, POINT TopLeft, SIZE sz)
{
CRect Rect(TopLeft, sz);
Create(pItem->Value->GetBuffer(), WS_CHILD | WS_VISIBLE | SS_CENTER | SS_NOTIFY, Rect, Parent);
ShowWindow(SW_SHOW);
}

BEGIN_MESSAGE_MAP(Foo, CStatic)
ON_WM_CTLCOLOR_REFLECT()
ON_WM_ERASEBKGND()
END_MESSAGE_MAP()

HBRUSH Foo::CtlColor(CDC* pDC, UINT nCtlColor)
{
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)GetStockObject(NULL_BRUSH);
}

BOOL Foo::OnEraseBkgnd(CDC* pDC)
{
return FALSE;
}

任何人都可以建议我可能做错了什么吗?

最佳答案

WM_CTLCOLOR 被发送到父窗口,而不是静态控件。

要在静态控件类中捕获消息,您需要在消息映射中使用 ON_WM_CTLCOLOR_REFLECT,请参阅 MSDN Docs并使用 HBRUSH Foo::CtlColor(CDC* pDC, UINT nCtlColor)

关于visual-c++ - CStatic 未收到 WM_CTLCOLOR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18204030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com