MFC中CScrollView对话框位置及滚动条调整
2017-08-22 09:49
519 查看
在MFC中CScrollView嵌入的是对话框的时候,可以简单快速实现滚动条的大小:
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);
在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);
}
}
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);
在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);
}
}
相关文章推荐
- MFC TableControl控件子对话框 以及子控件 随主对话框 最大化后 调整大小及位置
- MFC中把viewl类的基类由CView转换成CScrollView,使用滚动条的方法
- MFC CScrollView 对大视图出现滚动条回滚问题的解决
- MFC动态调整对话框控件位置和大小
- MFC 滚动条 CSCROLLVIEW的使用
- MFC中控件大小和位置随对话框大小调整
- iOS 通过代码修改AutoLayout的约束连线,来实现调整view的位置
- QGraphicsView大于QGraphicsScene时出现滚动条时,改变scene的显示位置
- iOS 通过代码修改AutoLayout的约束连线,来实现调整view的位置
- MFC--滚动视图窗口(CScrollView)使用双缓冲问题
- 调整viewState的位置,有助于SEO
- MFC如何使控件大小随着对话框大小自动调整
- UIButton如何正确调整imageView及titleLabel的位置
- MFC对话框水平和垂直滚动条功能
- 如何实现控件随对话框大小变化而自动调整大小和位置
- MFC对话框自动调整(Automatic Dialog Resizing) -- 翻译 Dmitry Kochin
- MFC 控件随窗口尺寸变化自动调整位置及大小
- MFC中对话框调用View类中的菜单,以及类的封装继承多态
- mfc控件位置调整
- mfc获取控件在对话框上的位置