用vc++作滾動條控件

  首先用應用嚮導產生一名爲scro的基於對話框的應用,再利用對話框編輯器加入兩個同樣的水平滾動條,兩個滾動條的id分別取idc—scr1idc—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.利用classwizardcscrodlg中加入滾動條消息控制函數,即選擇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

相關文章
相關標籤/搜索