您的位置:首页 > 其它

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);//将变化后的对话框大小设为旧大小

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: