在对话框菜单中未触发OnVScroll()?

时间:2019-05-01 00:08:01

标签: c++ mfc

我在.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)
    {
    ...
    }
}

我已经设置了SetScrollRangeSetScrollPos,但确实在菜单中看到了滚动条。但是,OnVScroll从未被调用。我可以拖动所有想要的滚动条,但是放开鼠标后它会弹出回到其0位置。

我有另一个类声明为class YourClass: public CDialog { ... };,并且使用相同的代码,滚动工作正常,并且调用了OnVScroll

是否有任何线索我可能需要在MyClass中进行滚动操作才能工作?

在调试时,从ON_WM_VSCROLL()的消息映射中删除YourClass的行为与MyClass相同,即存在滚动条,但未触发OnVScroll,所以我怀疑它与消息映射有关。

也许与AFX_EXT_CLASS有关?..我不确定。有人可以指出我正确的方向吗?

0 个答案:

没有答案