MFC对话框及其控件同步缩放

这是最原始的方法也是最实用的方法!

代码如下:

YourDlg.h头文件中加入:

POINT m_oSize;

// 消息映射函数,可由Wizzard半自动生成!

afx_msg void OnSize(UINT nType, int cx, int cy);


YourDlg.cpp文件中加入:

// 初始化对话框重载函数,一般工程会自动生成,如果没有可手工添加

BOOL CItouziDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();

CRect rect;  
GetClientRect(&rect);  
m_oSize.x = rect.right - rect.left;  
m_oSize.y = rect.bottom - rect.top;  

        ......

}

void YourDlg::OnSize(UINT nType, int cx, int cy)

{
CDialogEx::OnSize(nType, cx, cy);


// TODO: Add your message handler code here
if (nType==SIZE_RESTORED || nType==SIZE_MAXIMIZED)  
{  


float   ratio[2];  
POINT   newDialogSize;  
CRect   newRect;  


//获取新的客户区的大小  
GetClientRect(&newRect);  
newDialogSize.x = newRect.right - newRect.left;  
newDialogSize.y = newRect.bottom - newRect.top;  


//得现在的对话框与以往对话框的大小比例  
ratio[0]    = (float)newDialogSize.x / m_oSize.x;  
ratio[1]    = (float)newDialogSize.y / m_oSize.y;  


CRect Rect;  
int woc;  


//左右上角的数据  
CPoint OldTLPoint, NewTLPint;  
CPoint OldBRPoint, NewBRPint;  


//列出所有控件  
HWND  hwndChild = ::GetWindow(m_hWnd,GW_CHILD);  


while(hwndChild)  
{  
//取得ID  
woc  = ::GetDlgCtrlID(hwndChild);  
GetDlgItem(woc)->GetWindowRect(Rect);  
ScreenToClient(Rect);  


OldTLPoint = Rect.TopLeft();  
NewTLPint.x  = long(OldTLPoint.x*ratio[0]);  
NewTLPint.y  = long(OldTLPoint.y*ratio[1]);  


OldBRPoint   = Rect.BottomRight();  
NewBRPint.x  = long(OldBRPoint.x*ratio[0]);  
NewBRPint.y  = long(OldBRPoint.y*ratio[1]);  


Rect.SetRect(NewTLPint,NewBRPint);  
GetDlgItem(woc)->MoveWindow(Rect,TRUE);  
hwndChild=::GetWindow(hwndChild, GW_HWNDNEXT);  
}  
m_oSize   = newDialogSize;      
}  
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值