MFC中CScrollView对话框位置及滚动条调整

来源:互联网 发布:plsql数据导出命令 编辑:程序博客网 时间:2024/06/10 22:12
        在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);}}




原创粉丝点击