0

尝试CScrollBar在我的 Windows7 的 MFC C++ 应用程序中使用。

我收到所有消息都很好,并且有一个看起来像这样的处理程序:

void Dialog::OnHScroll(UINT nSBCode, UINT apos, CScrollBar* pScrollBar)
{    
    SCROLLINFO si;
    si.cbSize = sizeof( si );
    si.fMask = SIF_TRACKPOS;
    m_slider.GetScrollInfo(&si,SIF_TRACKPOS|SIF_POS|SIF_PAGE);
    int nTrackPos = si.nTrackPos; //0 except on TB_THUMBTRACK
    int nPos = si.nPos; //0 except on TB_THUMBTRACK
    UINT nPage = si.nPage; //seems correct always but I dont need it

我尝试使用提取位置的原因GetScrollInfo是因为它们可能比适合 16 位 var 的更大,因此我不能使用传递的 pos 作为参数。

然而,我的问题是,我只有在拖动栏并接收到拖动操作TB_THUMBTRACK的结尾时才获得有效位置。TB_ENDTRACK如果我单击滚动条或在每一端使用箭头,则所有位置(参数 pos 和SCROLLINFO结构中除 page 之外的所有内容)都将为 0。

有谁知道如何获得所有消息的正确位置?即TB_LINEUP, TB_LINEDOWN等。

4

1 回答 1

1

查看 MSDN 中显示的 WM_HSCROLL 事件处理程序的示例代码:

MSDN 文档

于 2013-03-12T07:53:57.323 回答