MFC介面程式設計基礎(14):滾動條
阿新 • • 發佈:2019-01-12
上一篇:MFC介面程式設計基礎(13):列表框和組合框 | 下一篇:MFC介面程式設計基礎(15):程式舉例+遮蔽或接收鍵盤事件 |
---|
滾動條是 CScrollBar 類的物件,是 Windows 應用程式中一個很重要的控制元件,通常附在對話方塊上用來協助觀察資料或確定位置,也可以用來作為資料輸入的工具。滾動條有水平和垂直兩種。
【例】
建立一個水平滾動條,最小值為 0 ,最大值為 100 ,單擊滾動條兩端箭頭時滑塊移動的增量值為 2 ,單擊滾動條中的空白處(滑塊與兩端箭頭之間的區域)時滑塊移動的增量值為 10 。另有一個只讀的編輯框,顯示了滑塊當前位置所代表的值。
假定工程名為 TEST 。
-
介面設計
首先建立一個對話方塊應用程式框架,然後放置水平滾動條、編輯框,按表連線變數,編輯框設定為只讀。
-
初始化
滾動條的初始化就是設定最小值,最大值,以及初始時滑塊所代表的值。滾動條初始化在對話方塊的初始化函式中完成,涉及兩個函式: -
設定最大值和最小值
函式原型:
void SetScrollRange(int nMinPos , int nMaxPos , BOOL bRedraw = TRUE);
引數說明:
①:nMinPos 表示最小值
②:nMinPos 表示最大值 。
③:當 bRedraw 為 TRUE 時重畫滾動條。
- 設定滑塊的位置
格式:
int SetScrollPos( int nPos , BOOL bRedraw = TRUE );
引數說明 :
①:nPos 表示滑塊的位置。
②:當 bRedraw 為 TRUE 時重畫滾動條。
滾動條初始化程式碼如下:
BOOL CTESTDlg::OnInitDialog() { ┆ // TODO: Add extra initialization here m_s.SetScrollRange(0,100); m_s.SetScrollPos(50); m_e=50; // 初始時,編輯框顯示 50 。 UpdateData(FALSE); // 更新編輯框顯示的內容。 ┆ };
- 編寫訊息處理函式
當用戶在滾動條上進行操作時,滾動條接收不到任何訊息。但是對話方塊卻能接收到 WM_HSCROLL (水平滾動條)或 WM_VSCROLL (垂直滾動條)訊息,也就是說,程式對滾動條的操作只能在 OnHScroll() 或 OnVScroll() 中編寫程式碼。
滾動條處理 WM_Hscroll 訊息的函式為:
void CTESTDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
在對話方塊的屬性面板中查詢WM_HSCROLL命令,並新增響應函式
做如圖選擇,點選“”就把OnHScroll函式新增進去。
響應函式引數說明 :
① pScrollBar 指向使用者正在進行操作的滾動條。
② nPos 表示滑塊當前的位置。
③ nSBCode 指示使用者正在進行的操作,其取值及其意義見表。
程式程式碼:
…………………………………………………………
void CTestDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{ // TODO: Add your message handler code here and/or call default
if (pScrollBar==&m_s)
{
int iNowPos;
switch(nSBCode)
{
case SB_THUMBTRACK: // 拖動滾動滑塊時
m_s.SetScrollPos(nPos);
m_e=nPos;
break;
case SB_LINELEFT : // 單擊滾動條向左的箭頭
iNowPos=m_s.GetScrollPos(); // 獲取滑塊當前位置所代表的值
iNowPos=iNowPos-2;
if(iNowPos<0)
iNowPos=0;
m_s.SetScrollPos(iNowPos);
m_e=iNowPos;
break;
case SB_LINERIGHT : // 單擊滾動條向右的箭頭
iNowPos=m_s.GetScrollPos(); // 獲取滑塊當前位置所代表的值
iNowPos=iNowPos+2;
if(iNowPos>100)
iNowPos=100;
m_s.SetScrollPos(iNowPos);
m_e=iNowPos;
break;
case SB_PAGELEFT : // 單擊滾動條左邊的箭頭與滑塊之間的區域
iNowPos=m_s.GetScrollPos(); // 獲取滑塊當前位置所代表的值
iNowPos=iNowPos-10;
if(iNowPos<0)
iNowPos=0;
m_s.SetScrollPos(iNowPos);
m_e=iNowPos;
break;
case SB_PAGERIGHT : // 單擊滾動條右邊的箭頭與滑塊之間的區域
iNowPos=m_s.GetScrollPos(); // 獲取滑塊當前位置所代表的值
iNowPos=iNowPos+10;
if(iNowPos>100)
iNowPos=100;
m_s.SetScrollPos(iNowPos);
m_e=iNowPos;
break;
}
}
UpdateData(FALSE);
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
…………………………………………………………
說明:
- 由於對話方塊上可能有多個滾動條,因此函式首先需要根據指標 pScrollBar 確定事件發生在哪一個滾動條上,方法是使用表示式 pScrollBar==&m_s。因為, pScrollBar 指向發生事件的滾動條,所以這個表示式為真時,意味著使用者對滾動條 m_s 進行了操作。
- 使用者對滾動條的操作有 5 種,因此函式中必須以這 5 種情況分別進行處理。
上一篇:MFC介面程式設計基礎(13):列表框和組合框 | 下一篇:MFC介面程式設計基礎(15):程式舉例+遮蔽或接收鍵盤事件 |
---|