VC控件随窗口最大化而变大或缩小
2014-11-16 23:49
393 查看
以下代码是我在网上看到后整理,并已经过测试,可以直接使用。
一. 本对话框实现所有控件随窗口最大化或恢复原状:
1.将SizeAdjust类添加到工程中,.cpp与.h文件。
2.在**dlg.cpp文件#include"SizeAdjust.h"
3.定义一全局CRect变量rectWholerect,在初始化函数中:GetClientRect(rectWholerect);//获取当前窗口的大小
4.添加OnSize(UINT nType, int cx, int cy) 消息函数,在函数中加入:
CSizeAdjust sizeadjust;
sizeadjust.OnSizeAdjust(rectWholerect,this,cx,cy);
即可实现,本对话框中所有控件随窗口大小自动变化。
二. 如果主对话框中有tab控件,即主对话框中有若干个子对话框,怎样改变里面的控件大小呢:
1.在主对话框的OnSize(UINT nType, int cx, int cy) 消息函数中添加:
if(nType!=SIZE_MINIMIZED )//注意这个必须要有,否则最小化后再最大化就会有问题
{
if(para1.GetSafeHwnd() && para2.GetSafeHwnd())//假设这里有2个子对话框
{
CRect rc;
m_maingroup.GetClientRect(&rc);
//调整子对话框在父窗口中的位置
rc.top -= 1;
rc.bottom -= 20;
rc.left -= 6;
rc.right -= 8;
//设置子对话框尺寸并移动到指定位置
para1.MoveWindow(&rc);
para2.MoveWindow(&rc);
}
}
2.在每个子对话框的OnSize(UINT nType, int cx, int cy) 消息函数中添加:
//若子对话框每个控件都需要放大
void CPara1::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
CRect rect;
CWnd* pWnd;
//获取第一个子窗口,即第一个控件
pWnd = GetWindow(GW_CHILD);
while (NULL != pWnd)
{
if(pWnd)//判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建
{
CRect rectActive; //获取控件变化前大小
pWnd->GetWindowRect(rectActive);
ScreenToClient(rectActive);//将控件大小转换为在对话框中的区域坐标
// cx/m_rect.Width()为对话框在横向的变化比例
rectActive.left=rectActive.left*cx/m_rect.Width();/////调整控件大小
rectActive.right=rectActive.right*cx/m_rect.Width();
rectActive.top=rectActive.top*cy/m_rect.Height();
rectActive.bottom=rectActive.bottom*cy/m_rect.Height();
pWnd->MoveWindow(rectActive);//设置控件大小
}
//获取下一个控件
pWnd = pWnd->GetNextWindow();
}
GetClientRect(&m_rect);
}
//若子对话框只有一个控件都需要放大
void CPara2::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
CWnd *pWnd;
pWnd=GetDlgItem(IDC_ATSLIST);
if(pWnd)//判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建
{
CRect rect; //获取控件变化前大小
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标
rect.left=rect.left*cx/m_rect.Width();/////调整控件大小
rect.right=rect.right*cx/m_rect.Width();
rect.top=rect.top*cy/m_rect.Height();
rect.bottom=rect.bottom*cy/m_rect.Height();
pWnd->MoveWindow(rect);//设置控件大小
}
GetClientRect(&m_rect);//将变化后的对话框大小设为旧大小
}
一. 本对话框实现所有控件随窗口最大化或恢复原状:
1.将SizeAdjust类添加到工程中,.cpp与.h文件。
2.在**dlg.cpp文件#include"SizeAdjust.h"
3.定义一全局CRect变量rectWholerect,在初始化函数中:GetClientRect(rectWholerect);//获取当前窗口的大小
4.添加OnSize(UINT nType, int cx, int cy) 消息函数,在函数中加入:
CSizeAdjust sizeadjust;
sizeadjust.OnSizeAdjust(rectWholerect,this,cx,cy);
即可实现,本对话框中所有控件随窗口大小自动变化。
二. 如果主对话框中有tab控件,即主对话框中有若干个子对话框,怎样改变里面的控件大小呢:
1.在主对话框的OnSize(UINT nType, int cx, int cy) 消息函数中添加:
if(nType!=SIZE_MINIMIZED )//注意这个必须要有,否则最小化后再最大化就会有问题
{
if(para1.GetSafeHwnd() && para2.GetSafeHwnd())//假设这里有2个子对话框
{
CRect rc;
m_maingroup.GetClientRect(&rc);
//调整子对话框在父窗口中的位置
rc.top -= 1;
rc.bottom -= 20;
rc.left -= 6;
rc.right -= 8;
//设置子对话框尺寸并移动到指定位置
para1.MoveWindow(&rc);
para2.MoveWindow(&rc);
}
}
2.在每个子对话框的OnSize(UINT nType, int cx, int cy) 消息函数中添加:
//若子对话框每个控件都需要放大
void CPara1::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
CRect rect;
CWnd* pWnd;
//获取第一个子窗口,即第一个控件
pWnd = GetWindow(GW_CHILD);
while (NULL != pWnd)
{
if(pWnd)//判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建
{
CRect rectActive; //获取控件变化前大小
pWnd->GetWindowRect(rectActive);
ScreenToClient(rectActive);//将控件大小转换为在对话框中的区域坐标
// cx/m_rect.Width()为对话框在横向的变化比例
rectActive.left=rectActive.left*cx/m_rect.Width();/////调整控件大小
rectActive.right=rectActive.right*cx/m_rect.Width();
rectActive.top=rectActive.top*cy/m_rect.Height();
rectActive.bottom=rectActive.bottom*cy/m_rect.Height();
pWnd->MoveWindow(rectActive);//设置控件大小
}
//获取下一个控件
pWnd = pWnd->GetNextWindow();
}
GetClientRect(&m_rect);
}
//若子对话框只有一个控件都需要放大
void CPara2::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
CWnd *pWnd;
pWnd=GetDlgItem(IDC_ATSLIST);
if(pWnd)//判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建
{
CRect rect; //获取控件变化前大小
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标
rect.left=rect.left*cx/m_rect.Width();/////调整控件大小
rect.right=rect.right*cx/m_rect.Width();
rect.top=rect.top*cy/m_rect.Height();
rect.bottom=rect.bottom*cy/m_rect.Height();
pWnd->MoveWindow(rect);//设置控件大小
}
GetClientRect(&m_rect);//将变化后的对话框大小设为旧大小
}
相关文章推荐
- 功能: Form窗口最大化时,控件相对位置变化的问题 (学习日记2016-12-23)
- VC防止窗口和控件闪烁的方法
- 解决vc最大化窗口时,任务栏被覆盖的问题
- VC:WebBrowser控件始终在本窗口打开新页面
- VC,webbrowser控件中弹出新网页窗口
- VC中获取窗口控件相对客户区的坐标
- VC防止窗口和控件闪烁的方法
- VC-基础-WebBrowser控件中弹出新网页窗口
- VC窗口(控件)中显示指定 URL 对应图片
- VC防止窗口和控件闪烁的方法
- 怎么实现MFC窗口的最大化以及控件随最大化发生位置变动原因
- MFC对话框控件和背景图片自适应窗口最大化和拉伸缩放的实现
- 当窗口大小改变布局管理器会自动缩小放大控件的大小
- VC 控件 随窗口调整大小
- VC Webbrowser 控件窗口的隐藏和显示
- VC防止窗口和控件闪烁的方法
- VC拖放窗口中的控件
- delphi 窗口最大化后控件的大小变化怎么设置
- MFC窗口最大化&移动窗口位置&获取控件句柄,设置控件大小
- VC 开发单文档程序窗口运行即最大化