首先用應用嚮導產生一名爲scro的基於對話框的應用,再利用對話框編輯器加入兩個同樣的水平滾動條,兩個滾動條的id分別取idc—scr1和idc—scr2,結果以下圖,將其做爲本文的示例。git
對話框編輯器雖然容許將滾動條控件加進對話框中,並且,類嚮導容許加入數據成員,但要使這兩個水平滾動條工做,還必須加進一些代碼。就本例程序,當用戶拖動滾動塊或用鼠標滾動箭頭時,滾動條就會向對話框發送WM_HSCROLL消息,對話框消息控制函數必須對這一消息進行處理,而後將滾動塊定位到相應的位置上。
通常狀況下,對話框中的每一控件都有本身獨立的消息控制函數,但滾動條控件則有點不一樣,由於對話框中全部的水平滾動條都只有一個WM_HSCROLL消息控制函數,而全部的垂直滾動條都只有一個WM_HSCROLL消息控制函數。若是對話框中只有一個水平(或垂直)滾動條,則不會出現什麼問題,問題是本例程序有一特殊之處,筆者有意設置了兩個水平滾動條,可按前述都用一個WM_HSCROLL消息控制函數,因此程序必須能識別出哪一個滾動條在發送消息。下面是具體步驟。
1.定義滾動範圍的最大值和最小值。
在scrodlg.h類聲明中的最上面加入下面兩行。編輯器
enum {nmin=0}; enum {nmax=100};
2.修改oninitdialog函數,初始化滾動範圍,決定那一個滾動條發送消息。函數
// todo: add extra initialization here cscrollbar* psb = (cscrollbar*) getdlgitem(idc—scr1); psb-〉setscrollrange(nmin, nmax); psb = (cscrollbar*) getdlgitem(idc_scr2); psb-〉setscrollrange(nmin, nmax);
3.利用classwizard在cscrodlg中加入滾動條消息控制函數,即選擇wm—hscroll消息,而後加進onhscroll成員函數,並在其中加入以下代碼:測試
void cscrodlg::onhscroll(uint nsbcode, uint npos, cscrollbar* pscrollbar) {// todo: add your message handler code here and/or call default int ntemp1, ntemp2; ntemp1 = pscrollbar-〉getscrollpos(); switch(nsbcode) {
case sb—thumbposition: pscrollbar-〉setscrollpos(npos); break; case sb—lineleft: // 左按鈕 ntemp2 = (nmax - nmin) / 10; //劃爲10等份 if ((ntemp1 - ntemp2) 〉 nmin)
{
ntemp1 -= ntemp2;
} else
{
ntemp1 = nmin;
} pscrollbar-〉setscrollpos(ntemp1); break; case sb—lineright: // 右箭頭按鈕 ntemp2 = (nmax - nmin) / 10; if ((ntemp1 + ntemp2) 〈 nmax)
{
ntemp1 += ntemp2;
} else
{
ntemp1 = nmax;
} pscrollbar-〉setscrollpos(ntemp1); break;
} cdialog::onhscroll(nsbcode, npos, pscrollbar);}
4.如今能夠編譯、測試程序了。ui