MFC MFC對話框滾動條的使用


    對話框的(上下/左右)滾動事件,比如,把一個比較大的對話框放入tab控件的某一頁時,就需要添加滾動條。在使用了java和qt等圖形界面化的集成開發環境之后,再使用MFC,就會發現,想要讓一個對話框滾動是多么麻煩的一件事情。下面我記錄一下自己在使用MFC對話框自己帶的垂直滾動條的過程。

  (1)設置對話框的vertical scrollbar屬性為true;

  (2)初始化滾動條,如下:    

 
void Dlg_WholeTest_Test::initScrollbar()
{
SCROLLINFO scrollinfo;
GetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
scrollinfo.nPage=10; //設置滑塊大小
scrollinfo.nMax=75; //設置滾動條的最大位置0--75
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
}
 

  在OnInitDialog函數中調用該初始化函數即可。

  (3)重新實現OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)消息處理函數。

 
void MyDialog::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)   //對話框的滾動效果
{
// TODO: 在此添加消息處理程序代碼和/或調用默認值

SCROLLINFO scrollinfo;
GetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
int unit=3;
switch (nSBCode)
{
case SB_LINEUP: //Scroll one line up
scrollinfo.nPos -= 1;
if (scrollinfo.nPos<scrollinfo.nMin)
{
scrollinfo.nPos = scrollinfo.nMin;
break;
}
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
ScrollWindow(0,unit);
break;
case SB_LINEDOWN: //Scroll one line down
scrollinfo.nPos += 1;
if (scrollinfo.nPos+scrollinfo.nPage>scrollinfo.nMax) //此處一定要注意加上滑塊的長度,再作判斷
{
scrollinfo.nPos = scrollinfo.nMax;
break;
}
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
ScrollWindow(0,-unit);
break;
case SB_PAGEUP: //Scroll one page up.
scrollinfo.nPos -= 5;
if (scrollinfo.nPos<=scrollinfo.nMin)
{
scrollinfo.nPos = scrollinfo.nMin;
break;
}
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
ScrollWindow(0,unit*5);
break;
case SB_PAGEDOWN: //Scroll one page down
scrollinfo.nPos += 5;
if (scrollinfo.nPos+scrollinfo.nPage>=scrollinfo.nMax) //此處一定要注意加上滑塊的長度,再作判斷
{
scrollinfo.nPos = scrollinfo.nMax;
break;
}
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
ScrollWindow(0,-unit*5);
break;
case SB_ENDSCROLL: //End scroll
break;
case SB_THUMBPOSITION: //Scroll to the absolute position. The current position is provided in nPos
break;
case SB_THUMBTRACK: //Drag scroll box to specified position. The current position is provided in nPos
ScrollWindow(0,(scrollinfo.nPos-nPos)*unit);
scrollinfo.nPos = nPos;
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
break;
}

CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM