Mfc 为什么OnVScroll()方法只输入一次?

Mfc 为什么OnVScroll()方法只输入一次?,mfc,scrollbar,Mfc,Scrollbar,我在一个基于对话框的MFC应用程序中设计了一个从CScrollBar派生的类。在dialog类(MyScrollbarDlg)中,我设置ON_WM_VSCROLL消息,并在头文件中声明OnVSCroll方法。我还在相应的.cpp文件中实现了OnVScroll()方法。但令我惊讶的是,当我点击滚动条按钮上的箭头时,它只在第一次工作 我想调试我的代码,所以我在OnVScroll方法中设置了一个断点。然后奇怪的事情发生了。仅在第一次单击时才到达断点。当我继续时,滚动条从对话框中消失了!我不知道这怎么会

我在一个基于对话框的MFC应用程序中设计了一个从CScrollBar派生的类。在dialog类(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);

这一次,它的行为正常,但如果我设置了一个断点,滚动条会再次消失。你知道为什么吗?

确保你已经设置了滚动范围。如果不设置此项,则只会调用一次方法

我去过那里


{编辑} 我的运气更好

m_ScrollBar.SetScrollRange(min, max);
而不是设置滚动信息

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

另外,仔细检查一下你是否打过电话

m_ScrollBar.SetScrollPos(CurPos);

要在单击按钮后设置位置,请确保已设置滚动范围。如果不设置此项,则只会调用一次方法

我去过那里


{编辑} 我的运气更好

m_ScrollBar.SetScrollRange(min, max);
而不是设置滚动信息

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

另外,仔细检查一下你是否打过电话

m_ScrollBar.SetScrollPos(CurPos);

要在单击按钮后设置位置,请停止以答案的形式对您自己的问题进行评论。这不是一个论坛。只需编辑您的原始问题或对其他答案进行评论。请停止以答案的形式对您自己的问题进行评论。这不是一个论坛。只需编辑您的原始问题,或对其他答案进行评论。