【问题标题】:Why OnVScroll() method enters only once?为什么 OnVScroll() 方法只输入一次?
【发布时间】:2008-10-28 11:29:11
【问题描述】:

我在基于对话框的 MFC 应用程序中设计了一个派生自 CScrollBar 的类。在对话框类(MyScrollbarDlg)中,我设置了ON_WM_VSCROLL消息,并在头文件中声明了OnVSCroll方法。我还在相应的 .cpp 文件中实现了 OnVScroll() 方法。但令我惊讶的是,当我单击滚动条底部的箭头时,它只在第一次起作用。

我想调试我的代码,所以我在 OnVScroll 方法中设置了一个断点。然后奇怪的事情发生了。断点仅在第一次单击时到达。当我继续时,滚动条从对话框中消失了!我不知道这怎么会发生。谁能帮我解决这个烦人的错误?非常感谢!

我已将滚动范围设置如下:

  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时,OnVScroll()方法的参数nPos没有被使用。所以我改变了我的代码:

    int currPos = m_scrollbar.GetScrollPos(); m_scrollbar.SetScrollPos(currPos + 1,  TRUE);

这次它表现正常,但是如果我设置了一个断点,滚动条又消失了。你知道为什么吗?

【问题讨论】:

  • 请停止以答案的形式向您自己的问题提供 cmets。这不是论坛。只需编辑您的原始问题,或评论其他答案。

标签: mfc scrollbar


【解决方案1】:

确保您已设置滚动范围。如果你不设置这个,你的方法只会被调用一次。

去过那里...


{编辑} 我有更好的运气

m_ScrollBar.SetScrollRange(min, max);

比设置滚动信息。

您可能需要在保存之前检查标志字段以查看其设置是否正确。

另外,请仔细检查您是否致电

m_ScrollBar.SetScrollPos(CurPos);

点击按钮后设置位置

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-08
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多