- CSize sizeTotal(0, 900);
- SetScrollSizes(MM_TEXT, sizeTotal);
但是在實際運用當中,發現滾動條的範圍和對話框還是需要不斷地做動態的變更,有時候需要滾動,而有時候又不需要,所以需要不斷地做動態調整。
這裏提供解決方式主要是在ScrollView的中OnSize()消息函數中做調整。
#define TEST_SCROLLVIEW_HEIGHT 540 // CScrollView高度
#define TEST_SCROLLVIEW_WIDHT 980 // CScrollView寬度
#define TEST_SCROLLVIEW_SCROLL_LENGHT 20 // 滾動條所佔寬度
void CTestView::AjustScrollView(CRect& rect,CDialog* pDlg,int cx, int cy)
{
if(NULL == pDlg)
{
return;
}
if( rect.Height() > TEST_SCROLLVIEW_HEIGHT)
{
if(rect.Width() < TEST_SCROLLVIEW_WIDHT)
{
pDlg->SetWindowPos(this,0,0,TEST_SCROLLVIEW_WIDHT,cy,SWP_NOZORDER);
this->SetScrollSizes(MM_TEXT, CSize(TEST_SCROLLVIEW_WIDHT,cy));
this->SetScrollPos(SB_HORZ,0,TRUE);
}
else
{
pDlg->SetWindowPos(this,0,0,cx + TEST_SCROLLVIEW_SCROLL_LENGHT,cy + TEST_SCROLLVIEW_SCROLL_LENGHT,SWP_NOZORDER);
this->SetScrollSizes(MM_TEXT, CSize(cx,cy));
}
}
else
{
if(rect.Width() < TEST_SCROLLVIEW_WIDHT)
{
pDlg->SetWindowPos(this,0,0,TEST_SCROLLVIEW_WIDHT,TEST_SCROLLVIEW_HEIGHT,SWP_NOZORDER);
this->SetScrollSizes(MM_TEXT, CSize(TEST_SCROLLVIEW_WIDHT,CMAINTENANCE_SYSTEMVIEW_HEIGHT));
this->SetScrollPos(SB_HORZ,0,TRUE);
}
else
{
pDlg->SetWindowPos(this,0,0,cx + TEST_SCROLLVIEW_SCROLL_LENGHT,TEST_SCROLLVIEW_HEIGHT + TEST_SCROLLVIEW_SCROLL_LENGHT,SWP_NOZORDER);
this->SetScrollSizes(MM_TEXT, CSize(cx,TEST_SCROLLVIEW_HEIGHT));
}
this->SetScrollPos(SB_VERT,0,TRUE);
}
}
函數說明如下:
// 功能說明:調整滾動視圖中對話框大小和位置及滾動條範圍
// 參數:
// @rect 滾動視圖大小
// @pDlg 滾動視圖中對話框
// @cx、@cy 拖動視圖時位置變動
void AjustScrollView(CRect& rect,CDialog* pDlg,int cx, int cy);
void CTestView::OnSize(UINT nType, int cx, int cy)
{
CScrollView::OnSize(nType, cx, cy);
CRect rect;
GetClientRect(&rect);
if(m_testDlg.GetSafeHwnd()!=0)
{
AjustScrollView(rect,&m_testDlg,cx,cy);
}
}