从CScrollBar获取所有位置值

时间:2013-03-11 15:18:16

标签: c++ windows mfc

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

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

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提取位置的原因是因为它们可能大于16bit var中的位置,因此我不能使用作为参数传递的pos。

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

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

1 个答案:

答案 0 :(得分:1)

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

MSDN Documentation