水平滑块:
函数调用:
- // m_NumPicture存储的是当前*.dat文件中样本总数
- if( i < m_NumPicture )
- {
- // 控制滚动条至指定位置
- OnHScroll( SB_THUMBTRACK, i, &m_BrowseCtrl );
- }
函数体部分:
- void CSelectDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
- {
- static int tempPos = 0;
- //...
- switch( nSBCode )
- {
- case SB_LINELEFT:
- case SB_PAGELEFT: // 向左滚动一格
- m_CurPos --;
- if( m_CurPos < 0 )
- m_CurPos = m_NumPicture-1;
- break;
- case SB_LINERIGHT:
- case SB_PAGERIGHT: //向右滚动一格
- m_CurPos ++;
- if( m_CurPos >= m_NumPicture )
- m_CurPos = m_NumPicture-1;
- break;
- case SB_THUMBTRACK:
- case SB_THUMBPOSITION: //解决水平滑块16K限制 niuyi&libing@20081231
- SCROLLINFO info;
- info.cbSize = sizeof(SCROLLINFO);
- info.fMask = SIF_TRACKPOS;
- pScrollBar->GetScrollInfo(&info);
- if(tempPos == info.nTrackPos)
- {
- // 如果此时滑块“拖动”位置
- // 与上一次滑块位置相同,
- // 证明没有执行关于水平滑块的操作,
- // 即此时滑块的位置是由程序其它位置传入的,
- // 而非响应界面操作。此时不会产生超过16k越界问题。
- m_CurPos = nPos;
- }
- else
- {
- // 否则为OnHScroll函数自动获得界面操作。
- // 所以,为了避免超过16k产生越界问题
- // 使用GetScrollInfo获得较大的滑块位置
- m_CurPos = info.nTrackPos;
- }
- if( m_CurPos >= m_NumPicture )
- {
- m_CurPos = m_NumPicture-1;
- }
- //跳出之前将当前滑块的位置保存下来
- tempPos = m_CurPos;
- break;
- }
- }
另,MFC中结构体SCROLLINFO的定义:
- typedef struct tagSCROLLINFO {
- UINT cbSize;
- UINT fMask;
- int nMin;
- int nMax;
- UINT nPage;
- int nPos;
- int nTrackPos;
- } SCROLLINFO, *LPSCROLLINFO;
- typedef SCROLLINFO CONST *LPCSCROLLINFO;