2016-02-12 70 views
-2

我希望使用滾動條兩端的滾動箭頭來滾動條的位置。衆所周知,滾動條沒有其他控件所具有的通知,所以我正面臨一個問題。有沒有人曾經使用水平滾動條中的「滾動箭頭」滾動位置?

我的滾動條代碼如下 -

void CScrollBarExDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{ 
    if(nSBCode==SB_THUMBPOSITION) 
    { 
     if(pScrollBar==&m_Scroll) 
     { 

      m_Edit=nPos; 
      m_Scroll.SetScrollPos(nPos); 
     } 

    } 
    UpdateData(FALSE); 


    CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar); 
} 
+1

'所以我面臨着一個problem'你似乎忘了解釋* *什麼問題你面對的。 –

+0

@IgorTandetnik處理滾動箭頭的問題..你現在可以回答我嗎? –

+1

你在處理滾動箭頭時有什麼問題? –

回答

1

您必須修改MSDN example稍微用滾輪控制工作:

//add to message map 
ON_WM_HSCROLL() 

//initialize in OnInitDialog 
SCROLLINFO info = { sizeof(SCROLLINFO) }; 
info.nMin = 0; 
info.nMax = 100; 
info.nPage = 1; 
info.fMask = SIF_ALL; 
m_Scroll.SetScrollInfo(&info, TRUE); 

如果info.nPage大於1時,可能會甩掉範圍。添加此行來解決它:

info.nMax += info.nPage - 1; 

添加過載:

void CMyDialog::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{ 
    CDialog::OnVScroll(nSBCode, nPos, pScrollBar); 
    if (pScrollBar == &m_Scroll) 
    { 
     //get scrollbar information 
     SCROLLINFO info; 
     m_Scroll.GetScrollInfo(&info, SIF_ALL); 
     int pos = info.nPos; 

     //calculate the new position of scroll box 
     switch (nSBCode) 
     { 
     case SB_LEFT: pos = info.nMin; break; 
     case SB_RIGHT: pos = info.nMax; break; 
     case SB_LINELEFT: pos--; break; 
     case SB_LINERIGHT: pos++; break; 
     case SB_PAGELEFT: pos -= info.nPage; break; 
     case SB_PAGERIGHT: pos += info.nPage; break; 
     case SB_THUMBPOSITION: pos = nPos; break; 
     case SB_THUMBTRACK: pos = nPos; break; 
     } 

     //make sure the new position is within range 
     if (pos < info.nMin) pos = info.nMin; 

     //adjust the max value, incase we had changed it earlier in OnInitDialog 
     int max = info.nMax - info.nPage + 1; 
     if (pos > max) pos = max; 

     //set the new position 
     m_Scroll.SetScrollPos(pos); 
    } 
} 
+0

感謝你的代碼,現在我將執行它.. :) –

+1

'nPage'應該設置爲1.如果你需要將'nPage'設置爲另一個值,請參閱編輯。雖然它不應該是必要的。你也可能想看看Slider控件。 –