我有一个自定义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
处理程序,则会调用它。
可能是什么问题?
答案 0 :(得分:2)
诊断Windows消息传递问题的一个好方法是使用Spy ++或Winspector,这样您就可以了解Windows消息传递。
答案 1 :(得分:1)
找到它。问题出在滚动条类声明中:
class CScrollBase : public ATL::CWindowImpl<CScrollBase, WTL::CStatic>
更改为:
class CScrollBase : public ATL::CWindowImpl<CScrollBase>
使滚动条在面板上工作。