Introduction
Scroll Bar , 這玩意大家應該都很熟悉了,不過叫法到是蠻多的,問十個可能有十種不同的叫法,所以,本文就直接用 Scroll bar 來稱呼就好了。 這玩意的用法顧名思義,就是 Scroll (卷軸) ,所以我標題是不是該改成捲軸條...? ( 聽起來好像某種零食的感覺 )
在MFC 裡面 , 它也有為Scroll Bar 提供操作的 class , 即為 CScrollBar 。 而它的創建方式總共有兩種,一種就是在Tool Box 裡面 ( 圖一 ) , 另外一種事直接用Create 的方式 。
( 圖一 )
用Create的方式的話 , 則可以用這個
virtual BOOL Create (
DWORD dwStyle ,
const RECT & rect ,
CWnd * pParentWnd ,
UINT nID
) ;
這個的用法也很簡單,第一個就填想要增加的風格 ( Style ) ,算了...我還是用英文吧,怎麼翻譯都怪怪的 , 通常我會額外寫一個DWORD 型態的變數, 將這一格填進去,不然我會感覺整行就是看起來很阿雜...。
( 一 )
DWORD dw_ControlStyle = 0 ;
dw_ControlStyle = (SS_CENTER | WS_VISIBLE |WS_CHILD | SS_NOTIFY |SS_SUNKEN | SS_CENTERIMAGE | SS_ENDELLIPSIS );
m_SingleRectangle.Create (
_T(" "),
dw_ControlStyle,
CRect(150,150,240,240),
this ,
IDC_SingleRectangle);
( 二 )
m_SingleRectangle.Create(_T(" "),SS_CENTER | WS_VISIBLE |WS_CHILD | SS_NOTIFY |SS_SUNKEN | SS_CENTERIMAGE | SS_ENDELLIPSIS , CRect(150,150,240,240),this ,IDC_SingleRectangle);
---------------------------------------------------------------------------------------------------------------
兩個都一樣,只是第一個我看起來比較爽點而已,在來第二個參數就是填大小位置,這個請自己去看一下MSDN吧,真的要解釋的話可能會離題太遠,第三個就是填parent,這個也沒問題,一般來說就帶this進去就好,除非有特殊情況,第四個就填ID 。
對了 ! 上面的那個Create 請大家不要照抄, 這個是示範Create 的,而創建出來的是Static control , 風格的部分,還請各位去MSDN上面看會比較準確。
---------------------------------------------------------------------------------------------------------------
接下來介紹比較常用到的Function
1. BOOL SetScrollInfo(LPSCROLLINFO lpScrollInfo, BOOL bRedraw = TRUE);
這個是用於設定Scrollbar的各種參數用的
2. GetScrollPos () const ;
這個是取得當前Scroll bar 的位置 , 如果失敗則 return 0
//int pos = m_horiScrollbar.GetScrollPos () ;
3. SetScrollPos (int nPos,BOOL bRedraw = TRUE ) ;
將Scroll bar 移動到指定位置
//m_horiScrollbar.SetScrollPos (pos) ;
4. void GetScrollRange(int nBar, LPINT lpMinPos, LPINT lpMaxPos) const;
取得Scroll bar的滾動範圍,lpMinPos 指向Scroll bar滾動範圍的最小值 ,
lpMaxPos 則為最大值。
//最重要的
5.void OnHScroll (UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
不管是哪一種的Scroll bar , 滾動的通知都是用 WM_HSCROLL 和 WM_VSCROLL ( 一個垂直一個水平 , 我們今天介紹水平就好 ),這個一般呢,如果是用Tool box 拉過去的,我們會直接在Dialog 的Even那邊直接拉 ,不然的話,就自己加一個就好了。
ON_WM_HSCROLL() //.cpp
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); //.h
---------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------
基礎的會了後,我們就直接來看Sample吧,首先,我們先New一個新的Project ,名稱就隨便取 ( 這裡是用 scrollbar_Sample ) , 創建完後,就請讀者跟我一起做吧 !
Step1 :
我們先拉兩個Control ,然後我們將他們重新命名一下
Step2 .
Step3 :
接下來我們點Dialog ,然後選擇 WM_HSCROLL ( 我們要做水平 )
然後UI的部分這樣就可以了 , 簡單吧=_=| 接下來我們進到程式的部分。
Step4 :
補充 : Init 裡面有許多是我們用不到的,而且看起來又很礙眼的,可以把那幾行code先拿掉沒關係,我們只是要學簡單的Sample,還不用去管其他的code 。
Step 5 :
接下來,你應該可以找的到這個Function
void Cscrollbar_SampleDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
如果沒有,請回去步驟3 ,你一定忘記加那個Command 了 ! 不信你去看看 。
接下來照這樣寫。
Final :
成品。
基本上照做絕對不會有問題,如果有打錯字和忘記加Command之外的問題,歡迎留言寫信。
that's all
留言列表