close

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

 

 

 

 

 

 

 

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Eric 的頭像
    Eric

    一個小小工程師的心情抒發天地

    Eric 發表在 痞客邦 留言(0) 人氣()