MFC缩放实现

在其中添加void ModelAcquire::OnSize(UINT nType, int cx, int cy)消息

根据这里的nType可以判断窗口的最大化还是最小化

if(nType == SIZE_MINIMIZED) {//最小化

        return ;

    }

    else if (nType == SIZE_MAXIMIZED) {//最大化

        ;

    }

    else if (change_flag == TRUE){//还原

        ;

    }

1、  在缩放之前获得缩放前的窗口的大小

m_isInitial == TRUE保证窗口已经初始化完毕

if(m_isInitial == TRUE && m_modleDlgRect.IsRectEmpty()) {

           GetWindowRect(m_modleDlgRect);

           ScreenToClient(m_modleDlgRect);

           m_isInitial = FALSE;

         }

2、  获得缩放后的窗口的大小

CRect sizeRect;

GetWindowRect(sizeRect);

           ScreenToClient(sizeRect);

if (sizeRect != m_modleDlgRect) {

}//判断,因为窗口在生成只有会调用onsize()函数三次,所以要做上面和这次的判断

3、  计算缩放的大小,记得要用float类型,否则误差会很大

floatscalarWidth = sizeRect.Width()* 1.0  /m_modleDlgRect.Width() * 1.0;

   float scalarHeight = sizeRect.Height() * 1.0/ m_modleDlgRect.Height() * 1.0;

4、对所用控件进行缩放的时候,把所有控件都放在int型的数组中,这样在onsize中进行缩放的时候就可以直接用for(),从而避免大量的重复代码

for (int i = 0; i <m_ptIDCount; i++) {

                CRect rect;

                CWnd * cWnd =GetDlgItem(m_ptID[i]);

                cWnd->GetWindowRect(rect);

                ScreenToClient(rect);

                CRect moveRect;

                moveRect.left = rect.left *scalarWidth;

                moveRect.top = rect.top *scalarHeight;

                moveRect.right = rect.right *scalarWidth;

                moveRect.bottom = rect.bottom *scalarHeight;

 

                TCHAR classname[255];//存储类型的控件的名称

                GetClassName(cWnd->GetSafeHwnd(),classname,sizeof(classname));

                CString str;

                str.Format("%s",classname);

                if(str=="ComboBox") {

                    cWnd->MoveWindow(moveRect.left,moveRect.top, moveRect.Width(), moveRect.Height() * 100);

                }

                else

                    cWnd->MoveWindow(moveRect);

            }

移动控件的时候用moveWindow();

4、  这个地方值得注意的是,由于combox是有ListBox和文本框组合而成,如果我们直接对其进行缩放的话,就会发现下拉框中就没有内容了,所以多做个判断就可以解决问题了

CHARclassname[255];//存储类型的控件的名称

GetClassName(cWnd->GetSafeHwnd(),classname,sizeof(classname));

CStringstr;

str.Format("%s",classname);

if(str=="ComboBox") {

         cWnd->MoveWindow(moveRect.left,moveRect.top, moveRect.Width(), moveRect.Height() * 100);//这里设置combox固定的下拉框的大小

}

else

          cWnd->MoveWindow(moveRect);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值