现在的位置: 首页 > 综合 > 正文

解决水平滑块16K限制

2013年10月01日 ⁄ 综合 ⁄ 共 1876字 ⁄ 字号 评论关闭

水平滑块:

函数调用:

  1. // m_NumPicture存储的是当前*.dat文件中样本总数 
  2. if( i < m_NumPicture ) 
  3. {   
  4.       // 控制滚动条至指定位置 
  5.       OnHScroll( SB_THUMBTRACK, i, &m_BrowseCtrl );
  6. }

函数体部分:   

  1. void CSelectDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
  2. {
  3.     static int tempPos = 0;
  4.          //... 
  5.         switch( nSBCode )
  6.         {
  7.         case SB_LINELEFT: 
  8.         case SB_PAGELEFT: // 向左滚动一格 
  9.             m_CurPos --;
  10.             if( m_CurPos < 0 )
  11.                 m_CurPos = m_NumPicture-1;
  12.             break;
  13.         case SB_LINERIGHT:
  14.         case SB_PAGERIGHT: //向右滚动一格 
  15.             m_CurPos ++;
  16.             if( m_CurPos >= m_NumPicture )
  17.                 m_CurPos = m_NumPicture-1;
  18.             break;
  19.             
  20.         case SB_THUMBTRACK:
  21.         case SB_THUMBPOSITION: //解决水平滑块16K限制 niuyi&libing@20081231 
  22.             SCROLLINFO info;
  23.             info.cbSize = sizeof(SCROLLINFO);
  24.             info.fMask = SIF_TRACKPOS;
  25.             pScrollBar->GetScrollInfo(&info);
  26.             
  27.             if(tempPos == info.nTrackPos)
  28.             {
  29.                 // 如果此时滑块“拖动”位置 
  30.                 // 与上一次滑块位置相同, 
  31.                 // 证明没有执行关于水平滑块的操作, 
  32.                 // 即此时滑块的位置是由程序其它位置传入的, 
  33.                 // 而非响应界面操作。此时不会产生超过16k越界问题。 
  34.                 m_CurPos = nPos;
  35.             }
  36.             else
  37.             {
  38.                 // 否则为OnHScroll函数自动获得界面操作。 
  39.                 // 所以,为了避免超过16k产生越界问题 
  40.                 // 使用GetScrollInfo获得较大的滑块位置 
  41.                 m_CurPos =  info.nTrackPos;
  42.             }
  43.             if( m_CurPos >= m_NumPicture )
  44.             {
  45.                 m_CurPos = m_NumPicture-1;
  46.             }
  47.             //跳出之前将当前滑块的位置保存下来 
  48.             tempPos = m_CurPos; 
  49.             break;
  50.         }
  51. }

另,MFC中结构体SCROLLINFO的定义:

  1. typedef struct tagSCROLLINFO { 
  2.     UINT cbSize; 
  3.     UINT fMask; 
  4.     int  nMin; 
  5.     int  nMax; 
  6.     UINT nPage; 
  7.     int  nPos; 
  8.     int  nTrackPos; 
  9. }   SCROLLINFO, *LPSCROLLINFO; 
  10. typedef SCROLLINFO CONST *LPCSCROLLINFO;

抱歉!评论已关闭.