我在.hpp
中声明了以下类:
class AFX_EXT_CLASS MyClass: public CDialog
{
....
};
我已经在类定义中添加了滚动消息处理程序:
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
我已在源.cpp
文件中为消息处理程序添加了映射条目:
BEGIN_MESSAGE_MAP (MyClass, CDialog)
//{{AFX_MSG_MAP(MyClass)
ON_WM_VSCROLL()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
我已经在源文件中实现了OnVScroll
消息处理程序:
void MyClass::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
int vscroll_inc;
switch (nSBCode)
{
...
}
}
我已经设置了SetScrollRange
和SetScrollPos
,但确实在菜单中看到了滚动条。但是,OnVScroll
从未被调用。我可以拖动所有想要的滚动条,但是放开鼠标后它会弹出回到其0
位置。
我有另一个类声明为class YourClass: public CDialog { ... };
,并且使用相同的代码,滚动工作正常,并且调用了OnVScroll
。
是否有任何线索我可能需要在MyClass
中进行滚动操作才能工作?
在调试时,从ON_WM_VSCROLL()
的消息映射中删除YourClass
的行为与MyClass
相同,即存在滚动条,但未触发OnVScroll
,所以我怀疑它与消息映射有关。
也许与AFX_EXT_CLASS
有关?..我不确定。有人可以指出我正确的方向吗?