MFC經常使用控件之滾動條

近期學習了雞啄米大神的博客,對其中的一些知識點作了一些本身的總結。不過,博客內容大部分來自雞啄米。所以,這個博客算是轉載博客,只是加了一些我本身的理解而已。若想學習雞啄米大神的博客總結,請點擊鏈接:http://www.jizhuomi.com/software/257.htmlhtml

1.滾動條分爲水平滾動條(Horizontal Scroll Bar)和垂直滾動條(Vertical Scroll Bar)兩種.  MFC也爲滾動條控件的操做提供了類,即爲CScrollBar類。像列表框和組合框設置了WS_HSCROLL 或WS_VSCROLL風格之後出現的滾動條,不是一個獨立的窗口,而是這些窗口的一部分,這就是標準滾動條。而滾動條控件是一個獨立的窗口,它能夠得到焦點,響應某些操做。
ide

2.建立滾動條:
virtual BOOL Create(
   DWORD dwStyle,
   const RECT& rect,
   CWnd* pParentWnd,
   UINT nID
);
下面針對dwStyle參數進行詳細講解:
    SBS_HORZ:指定滾動條爲水平滾動條。若是沒有指定SBS_BOTTOMALIGN或SBS_TOPALIGN風格,則滾動條的高度、寬度和位置由Create函數的rect參數給出。
    SBS_VERT:指定滾動條爲垂直滾動條。若是沒有指定SBS_RIGHTALIGN或SBS_LEFTALIGN風格,則滾動條的高度、寬度和位置由Create函數的rect參數給出。
    SBS_TOPALIGN:與SBS_HORZ配合使用。滾動條的上邊緣與Create函數的rect參數指定矩形的上邊緣對齊。滾動條高度爲系統滾動條的默認高度。
    SBS_BOTTOMALIGN:與SBS_HORZ配合使用。滾動條的下邊緣與Create函數的rect參數指定矩形的下邊緣對齊。滾動條高度爲系統滾動條的默認高度。
    SBS_LEFTALIGN:與SBS_VERT配合使用。滾動條的左邊緣與Create函數的rect參數指定矩形的左邊緣對齊。滾動條寬度爲系統滾動條的默認寬度。
    SBS_RIGHTALIGN:與SBS_VERT配合使用。滾動條的右邊緣與Create函數的rect參數指定矩形的右邊緣對齊。滾動條寬度爲系統滾動條的默認寬度。
    dwStyle參數能夠是以上風格中某幾個的組合,另一般也會用到WS_CHILD、WS_VISIBLE風格。
函數

3.獲取滾動條參數信息函數:BOOL GetScrollInfo(LPSCROLLINFO lpScrollInfo, UINT nMask = SIF_ALL);
獲取的滾動條的參數信息,該信息爲SCROLLINFO結構體的形式。參數lpScrollInfo爲指向SCROLLINFO結構體變量的指針。
學習

 1     typedef struct tagSCROLLINFO {  2         UINT cbSize;         // 結構的尺寸(字節爲單位) 
 3         UINT fMask;          // 說明結構中的哪些參數是有效的,能夠是屏蔽值的組合,如SIF_POS|SIF_PAGE,若爲SIF_ALL則整個結構都有效 
 4         int  nMin;           // 滾動範圍最小值,當fMask 中包含SIF_RANGE 時有效 
 5         int  nMax;           // 滾動範圍最大值,當fMask 中包含SIF_RANGE 時有效 
 6         UINT nPage;          // 頁尺寸,用來肯定比例滾動框的大小,當fMask中包含SIF_PAGE時有效 
 7         int  nPos;           // 滾動框的位置,當fMask 中包含SIF_POS 有效 
 8         int  nTrackPos;      // 滾動時滾動框的位置,當fMask 中包含SIF_TRACKPOS 時有效,該參數只能查詢,不能設置,最好不要用該參數來查詢拖動時滾動框的位置 
 9     }   SCROLLINFO, *LPSCROLLINFO; 10     typedef SCROLLINFO CONST *LPCSCROLLINFO;  
View Code

4.設置滾動條參數信息:BOOL SetScrollInfo(LPSCROLLINFO lpScrollInfo, BOOL bRedraw = TRUE);參數bRedraw表示是否須要重繪滾動條,若是爲TRUE,則重繪。

5.獲取滾動條位置: int GetScrollPos()const;

6.將滾動塊移動到指定位置:int SetScrollPos(int nPos, BOOL bRedraw = TRUE);

7.獲取滾動條的滾動範圍:void GetScrollRange(LPINT lpMinPos, LPINT lpMaxPos) const;

6.消息處理函數:滾動條的通知消息都是用WM_HSCROLL 和WM_VSCROLL消息發送出去的。對這兩個消息的默認處理函數是CWnd::OnHScroll和CWnd::OnVScroll,通常須要在派生類中對這兩個函數進行重載,以實現滾動功能。函數聲明以下:
    afx_msg void OnHScroll(UINT nSBCode,UINT nPos,CScrollBar* pScrollBar);
    afx_msg void OnVScroll(UINT nSBCode,UINT nPos,CScrollBar* pScrollBar);
    參數:
    nSBCode是通知消息碼;nPos 是滾動框的位置,只有在nSBCode爲SB_THUMBPOSITION或SB_THUMBTRACK時,該參數纔有意義。若是通知消息是滾動條控件發來的,那麼pScrollBar 是指向該控件的指針,若是是標準滾動條發來的,則pScrollBar 爲NULL。
    滾動條消息通知碼nSBCode:
       SB_BOTTOM/SB_RIGHT:滾動到底端(右端)
       SB_TOP/SB_LEFT:滾動到頂端(左端)
       SB_LINEDOWN/SB_LINERIGHT:向下(向右)滾動一行(列)
       SB_LINEUP/SB_LINELEFT:向上(向左)滾動一行(列)
       SB_PAGEDOWN/SB_PAGERIGHT:向下(向右)滾動一頁
       SB_PAGEUP/SB_PAGELEFT:向上(向左)滾動一頁
       SB_THUMBPOSITION:滾動到指定位置
       SB_THUMBTRACK:滾動框被拖動。可利用該消息來跟蹤對滾動框的拖動
       SB_ENDSCROLL:滾動結束
this

示例代碼:spa

 

 1 建立滾動條:  2 m_scrollBar.Create(WS_CHILD|WS_VISIBLE|SBS_HORZ,CRect(10,10,250,50),this,1136);  3     m_scrollBar.SetScrollRange(1,100);  4 
 5 滾動條響應事件:  6 void CMFC_NoramlControlDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)  7 {  8     
 9     static int pos=0; 10     pos=m_scrollBar.GetScrollPos(); 11     switch(nSBCode) 12  { 13     case SB_THUMBPOSITION: 14         pos=nPos+10; 15         break; 16     case SB_THUMBTRACK: 17         pos=nPos; 18         break; 19     case SB_LINELEFT: 20         pos=nPos-5; 21         break; 22     case SB_PAGELEFT: 23         pos=nPos-10; 24         break; 25     case SB_LINERIGHT: 26         pos=nPos+5; 27         break; 28     case SB_PAGERIGHT: 29         pos=nPos+10; 30         break; 31  } 32  m_scrollBar.SetScrollPos(pos); 33  CString strPos; 34     strPos.Format("%d",pos); 35     GetDlgItem(IDC_STATIC1)->SetWindowText(strPos); 36  CDialog::OnHScroll(nSBCode, nPos, pScrollBar); 37 }
View Code
相關文章
相關標籤/搜索