QQ登录

只需一步,快速开始

27上位机VC MFC限制对话框窗口大小

[ 复制链接 ]

27上位机VC MFC限制对话框窗口大小

27上位机VC MFC限制对话框窗口大小

27上位机VC MFC限制对话框窗口大小

功能展示
在我们上位程序开发时,时常需要限制某一对话框的大小,满足程序功能的要求,让其只能在指定范围内调整大小。
我们当前程序就实现了这一功能,让程序只能在指定大小内调整,效果如图

要点提示
当对话框大小及位置发生变化时,会发送消息WM_SIZE、WM_SIZING、WM_GETMINMAXINFO;分别对应相应的处理函数:OnSize、OnSizing、OnGetMinMaxInfo。当窗口大小发生变化时,依次响应WM_GETMINMAXINFO-->WM_SIZING-->WM_SIZE。
OnGetMinMaxInfo
这个函数在窗口初始化的时候会被调用一次,当窗口大小发生改变的时候也会被调用。利用这个函数,可以比较方便的实现窗口最大最小尺寸的控制。
参数lpMMI是一个结构体指针,其中包含了有关窗口的最大化最小化的信息。
void CXXXDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) {     lpMMI->ptMinTrackSize.x = 500;    //x宽度     lpMMI->ptMinTrackSize.y = 100;    //y高度  CDialog::OnGetMinMaxInfo(lpMMI);
OnSizing
这个函数在窗口大小发生变化时被调用,如鼠标在拖拽窗口大小时,实时调用此函数。在这个函数里,也可以控制窗口的最大最小尺寸,但是没有OnGetMinMaxInfo方便。
OnSize
这个函数会在窗口大小改变结束后被调用,通常会在这个函数里重新摆放各个控件的位置及大小。用这个函数暂时没有找到什么办法可以控制窗口的最大最小大小。

实现功能
1.新建一个对话框应用程序
2.根据自己需要插入位图当作程序背景图
3.添加地变量CSize m_size;用作设置窗口的大小;
4.在对话框初始化时,对窗口大小作一个初始化
        m_size.cx=650;
        m_size.cy=440;
        ModifyStyle(WS_MAXIMIZEBOX,0,0);//去除最大化按钮
        //窗口居中;
        SetWindowPos(&wndTop,(GetSystemMetrics(SM_CXSCREEN)-m_size.cx)/2,
                (GetSystemMetrics(SM_CYSCREEN)-m_size.cy)/2,m_size.cx,m_size.cy,SWP_NOREDRAW);
5.最后添加OnSizing处理函数,限制窗口的最大值
void CGkbc8Dlg::OnSizing(UINT fwSide, LPRECT pRect)
{
        CDialog::OnSizing(fwSide, pRect);
        switch(fwSide)
        {
        case 1://左边
                if((pRect->right-pRect->left)>m_size.cx)
                        pRect->left=pRect->right-m_size.cx;
                        break;
        case 2://右边
                if((pRect->right-pRect->left)>m_size.cx)
                        pRect->right=pRect->left+m_size.cx;
                break;
        case 3://上边
                if((pRect->bottom-pRect->top)>m_size.cy)
                        pRect->top=pRect->bottom-m_size.cy;
                break;
        case 4: //左上角
                if((pRect->bottom-pRect->top)>m_size.cy)
                        pRect->top=pRect->bottom-m_size.cy;
                if((pRect->right-pRect->left)>m_size.cx)
                        pRect->left=pRect->right-m_size.cx;
                        break;
        case 5://右上角拖动
                if((pRect->bottom-pRect->top)>m_size.cy)
                        pRect->top=pRect->bottom-m_size.cy;
                if((pRect->right-pRect->left)>m_size.cx)
                        pRect->right=pRect->left+m_size.cx;
                break;
        case 6://下边
                if((pRect->bottom-pRect->top)>m_size.cy)
                        pRect->bottom=pRect->top+m_size.cy;
                break;
        case 7://左下角
                if((pRect->right-pRect->left)>m_size.cx)
                        pRect->left=pRect->right-m_size.cx;
                if((pRect->bottom-pRect->top)>m_size.cy)
                        pRect->bottom=pRect->top+m_size.cy;
                break;
        case 8://右下角
                if((pRect->right-pRect->left)>m_size.cx)
                        pRect->right=pRect->left+m_size.cx;
                if((pRect->bottom-pRect->top)>m_size.cy)
                        pRect->bottom=pRect->top+m_size.cy;
                break;
        }
}

下面演示整个功能实现过程

源码及视频下载
(仅在电脑可见)
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:27.上位机VC MFC限制对话框窗口大小.rar 
文件大小:387.8 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!























回复

使用道具 举报

点击查看
快速回复 返回列表 客服中心 搜索