【发布时间】:2010-10-14 02:06:58
【问题描述】:
我有一个自定义 WTL 控件,它是一个带有列表和自定义滚动条的面板。
class Panel
: public ATL::CWindowImpl<Panel>, public WTL::CDoubleBufferImpl<Panel> {
public:
DECLARE_WND_CLASS("Panel")
BEGIN_MSG_MAP_EX(Panel)
MSG_WM_CREATE(OnCreate)
MSG_WM_DESTROY(OnDestroy)
MSG_WM_SIZE(OnSize)
CHAIN_MSG_MAP(CDoubleBufferImpl<Panel>)
REFLECT_NOTIFICATIONS()
END_MSG_MAP()
滚动条由面板在 OnCreate() 中创建:
m_scrollBar.Create(m_hWnd, WTL::CRect(...));
该滚动条在许多其他对话框窗口中都可以正常工作。但是,在该面板控件内,滚动条出现,但根本没有接收到鼠标事件。如果我将WM_MOUSEMOVE 处理程序添加到面板,它会被调用。
可能是什么问题?
【问题讨论】:
-
父控件是否会吞噬该区域的所有 Windows 消息?
-
没有。该列表确实接收到鼠标事件。滚动条类是问题所在。请参阅下面的答案。