MFC中CScrollView對話框位置及滾動條調整

        在MFC中CScrollView嵌入的是對話框的時候,可以簡單快速實現滾動條的大小:
  1. CSize sizeTotal(0, 900);  
  2. 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);


在OnSize()函數中調用:

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);
	}
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章