我设计了一个在基于对话框的MFC应用程序中从CScrollBar派生的类。在对话框类(MyScrollbarDlg)中,我设置 ON_WM_VSCROLL 消息并在头文件中声明 OnVSCroll 方法。我还在相应的.cpp文件中实现了OnVScroll()方法。但令我惊讶的是,当我点击滚动条底部的箭头时,它只在第一次完成它的工作。
我想调试我的代码,所以我在OnVScroll方法中设置了一个断点。然后奇怪的事发生了。断点仅在第一次点击时到达。当我继续时,滚动条从对话框中消失了!我不知道这是怎么发生的。任何人都可以帮我修复这个烦人的bug吗?非常感谢你!
我已设置如下滚动范围:
SCROLLINFO scrllInfo;
m_scrollbar.GetScrollInfo(&scrllInfo, SIF_ALL);
scrllInfo.nMax = 15;
scrllInfo.nMin = 0;
scrllInfo.nPage = 0;
scrllInfo.nPos = 0;
m_scrollbar.SetScrollInfo(&scrllInfo, TRUE);
顺便说一句,我不使用对话框的嵌入式滚动条,而是使用设置为对话框成员的滚动条控件。
我做了一些实验,发现我提到的问题只发生在我单击滚动条控件底部的箭头时。单击其他箭头或拖动滚动框时,它的效果很好。点击我不知道的滚动条的底部箭头有什么不同吗?
我发现当滚动消息不是THUMBPOSITION或THUMBTRACK时,不使用nPos
方法的参数OnVScroll()
。所以我改变了我的代码:
int currPos = m_scrollbar.GetScrollPos(); m_scrollbar.SetScrollPos(currPos + 1, TRUE);
这次它正常,但如果我设置了一个断点,滚动条会再次消失。你知道为什么吗?
答案 0 :(得分:1)
确保已设置滚动范围。如果你没有设置它,你的方法只会被调用一次。
去过那里......
{编辑}
我好运m_ScrollBar.SetScrollRange(min, max);
而不是设置scrollinfo。
您可能需要检查标记字段,以确定在保存之前是否已正确设置。
另外,请仔细检查您是否打电话
m_ScrollBar.SetScrollPos(CurPos);
单击按钮
后设置位置