近期學習了雞啄米大神的博客,對其中的一些知識點作了一些本身的總結。不過,博客內容大部分來自雞啄米。所以,這個博客算是轉載博客,只是加了一些我本身的理解而已。若想學習雞啄米大神的博客總結,請點擊鏈接: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;
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 }