MFC对话框最大化实现

对话框最大化个人觉得完全是鸡肋,如果需要全屏话的软件完全可以用单文档实现,对话框只是实现一些小的功能的软件,但为了显示功能强大加上了最大化按钮,当初设计时是按对话框大小进行设计,放大以后真的不忍直视,但还是要将这倒霉的功能进行记录,以备后需。

对话框放大相应WM_SIZE消息,实现函数为Onsize(),只需在重载此函数即可

void CCDlgFrameDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);


// TODO: Add your message handler code here

//对话框初始化之间会调用Onsize进行框架初始化,如果不加判断会报错,因为空间还未加载

if(Init_flag)
{
change(IDC_STATIC);
change(IDC_COMBO1);
change(IDC_EDIT1);
change(IDC_PROGRESS1);
change(IDC_BUTTON1);

//放大倍数保存
m_Multiple_width=1/m_Multiple_width;
m_Multiple_heigh=1/m_Multiple_heigh;
}
}

函数change(int nID)主要实现控件放大和恢复

void CCDlgFrameDlg::change(int nID)
{
CRect Rect;
GetDlgItem(nID)->GetWindowRect(Rect);
ScreenToClient(Rect);


CPoint  OldTLPoint,TLPoint;
OldTLPoint=Rect.TopLeft();
TLPoint.x=long(OldTLPoint.x*m_Multiple_width);
TLPoint.y=long(OldTLPoint.y*m_Multiple_heigh);


CPoint  OldBRPoint,BRPoint;
OldBRPoint=Rect.BottomRight();
BRPoint.x=long(OldBRPoint.x*m_Multiple_width);
BRPoint.y=long(OldBRPoint.y*m_Multiple_heigh);


Rect.SetRect(TLPoint,BRPoint);
GetDlgItem(nID)->MoveWindow(Rect,TRUE);
}

放大倍数的提取则是在调用两个函数之前

CRect  rect;
  GetWindowRect(&rect);
  ScreenToClient(rect);
int  m_nDlgWidth=rect.right-rect.left;
int  m_nDlgHeight=rect.bottom-rect.top;

//获取屏幕尺寸
int  m_nWidth=GetSystemMetrics(SM_CXSCREEN);
int  m_nHeight=GetSystemMetrics(SM_CYSCREEN);·


m_Multiple_width=float(m_nWidth)/float(m_nDlgWidth);
m_Multiple_heigh=float(m_nHeight)/float(m_nDlgHeight);

放大倍数定义为float,是防止在多次放大和缩小时控件产生错位,精度高而已。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值