EasySize的使用

作者:小知 发布时间:2017-07-22 分类:MFC

     技术所限,难免错误,如有不对之处,敬请留言指正!

    本篇文章使用的工程源码test.rar点击可下载,可用vc++6.0或者vs2008打开。

    本篇文章使用到的EasySize.h文件EasySize.rar

    

    使用mfc开发界面时有时需要调整界面大小,但是相应控件需要保持一定的大小和位置,比如某个button按钮始终保持右下角。mfc本身不带这种功能,这时候就需要自绘这种功能,easysize类集成了这种功能,下面讲一下easysize的详细使用方法。

    先用vc++6.0新建一个基于对话框的mfc工程,这里工程取名为test。然后删除对话框上面的所有控件,这里有三个控件。

QQ截图20170722231941.jpg

QQ截图20170722232156.jpg

    这里删除三个自动生成的控件,然后手动添加几个控件。把窗体调整大一点,并且把窗体改成可调整大小的。

QQ截图20170722232552.jpg

    最大化后是这样的,按钮全跑偏了。退出按钮本来要在右下角的。

QQ截图20170722233617.jpg

    接下来使用easysize步骤如下:(操作过程中如果有不懂的配合图片提示操作)

    1:把EasySize.h头文件放在test工程文件夹里面

QQ截图20170722235054.jpg

            2:在StdAfx.h中最后一行添加 #include "EasySize.h"

QQ截图20170723000358.jpg

    3:在testDlg.h(你使用的时候用你命名的头文件,要使哪个窗体可调整大小,就放在哪个窗体的头文件,我这里是主对话框testDlg要使用easysize)中指定的地方添加 DECLARE_EASYSIZE  注意,结尾没有分号!!!

QQ截图20170723000717.jpg


    4:在OnInitDialog()函数(如果没有这个函数,在类向导里面添加)的末尾处添加INIT_EASYSIZE;

QQ截图20170723001617.jpg

QQ截图20170723001355.jpg

    5:在主对话框cpp文件的OnSize函数(如果没有这个函数,在类向导里面添加)里面的最后一行添加 UPDATE_EASYSIZE;  

QQ截图20170723001922.jpg

QQ截图20170723004733.jpg

    6:在窗体cpp文件的指定位置(具体位置看下边的图片)中添加操控按钮的代码,不要加分号

QQ截图20170723005109.jpg

BEGIN_EASYSIZE_MAP(CTestDlg)//括号里面填窗体的类名字
//在此控制控件
//EASYSIZE(IDC_BUTTON1,ES_KEEPSIZE,ES_KEEPSIZE,ES_BORDER,ES_BORDER,0)
END_EASYSIZE_MAP


    操作步骤结束!


以上6步操作漏掉任何一步编译是会出现错误的!

    我这里只操作前5步,然后编译就出现如下错误,这里提醒一下。

--------------------Configuration: test - Win32 Debug--------------------
Compiling...
testDlg.cpp
Linking...
testDlg.obj : error LNK2001: unresolved external symbol "private: void __thiscall CTestDlg::__ES__RepositionControls(int)" (?__ES__RepositionControls@CTestDlg@@AAEXH@Z)
Debug/test.exe : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.
test.exe - 1 error(s), 0 warning(s)





    控件调整一般有如下几种类型,这里挨个说明一下是什么意思

EASYSIZE(IDC_BUTTON1,ES_BORDER,ES_BORDER,ES_KEEPSIZE,ES_KEEPSIZE,0)

    括号里面有5个参数,第一个是控件的ID,后面四个分别是左上右下四个位置,最后是位置显示的方式,ES_HCENTER和ES_VCENTER表示居中,0表示普通显示方式,ES_BORDER表示离窗体边缘的位置不变,ES_KEEPSIZE表示该方向大小(指高度或者宽度)不变,上面的代码表示一个ID为IDC_BUTTON1的控件离窗体左边缘和上边缘的距离不变,然后高度和宽度都不变。

我们怎么使test工程的退出按钮始终处于右下角呢?

EASYSIZE(IDC_BUTTON1,ES_KEEPSIZE,ES_KEEPSIZE,ES_BORDER,ES_BORDER,0)

这样就行了。这里表示退出按钮始终离窗体右边缘和下边缘不变,然后退出按钮的高度和宽度不变。

EASYSIZE(IDC_BUTTON1,IDC_BUTTON2IDC_BUTTON4,ES_BORDER,ES_BORDER,0)

如果这样改表示左边离button2控件距离不变,上边离button4控件距离不变,宽高不变。


EASYSIZE(IDC_TITLE,ES_BORDER,ES_BORDER,ES_BORDER,ES_KEEPSIZE,ES_HCENTER)//在窗体顶部贴边居中
EASYSIZE(IDC_TITLE,ES_BORDER,ES_KEEPSIZE,ES_BORDER,ES_BORDER,ES_HCENTER)//在窗体底部贴边居中
EASYSIZE(IDC_TITLE,ES_BORDER,ES_BORDER,ES_BORDER,ES_BORDER,ES_HCENTER)//位置不变,控件大小改变(宽度不变)的居中
EASYSIZE(IDC_TITLE,ES_BORDER,ES_BORDER,ES_BORDER,ES_BORDER,ES_VCENTER)//位置不变,控件大小改变(高度不变)的居中


这个是居中的方式,更多玩法,自行测试体会。



这是testdlg的控件控制代码

//对控件进行操控
BEGIN_EASYSIZE_MAP(CTestDlg) 
//输入代码
EASYSIZE(IDC_BUTTON1,ES_KEEPSIZE,ES_KEEPSIZE,ES_BORDER,ES_BORDER,0)  //退出按钮处于右下角
EASYSIZE(IDC_MONTHCALENDAR1,ES_BORDER,ES_BORDER,ES_KEEPSIZE,ES_KEEPSIZE,0)  //日历控件左边和上面离窗体不变,宽高不变
EASYSIZE(IDC_COMBO1,ES_KEEPSIZE,ES_BORDER,ES_BORDER,ES_KEEPSIZE,0) //下拉框控件上边和右边离窗体不变,宽高不变
EASYSIZE(IDC_BUTTON2,ES_KEEPSIZE,ES_KEEPSIZE,IDC_BUTTON1,ES_BORDER,0) //打开按钮右边离退出按钮距离不变,下边离窗体边缘不变,宽高不变
EASYSIZE(IDC_BUTTON4,ES_BORDER,ES_KEEPSIZE,ES_BORDER,ES_BORDER,ES_HCENTER)  //底部贴边居中,宽高皆不变
EASYSIZE(IDC_BUTTON5,ES_BORDER,ES_BORDER,ES_BORDER,ES_KEEPSIZE,ES_HCENTER)  //顶部贴边居中,宽高皆不变
EASYSIZE(IDC_BUTTON6,ES_KEEPSIZE,ES_BORDER,ES_BORDER,ES_BORDER,ES_VCENTER)  //右边贴边居中,宽高皆不变
EASYSIZE(IDC_BUTTON7,ES_BORDER,ES_BORDER,ES_KEEPSIZE,ES_BORDER,ES_VCENTER)  //左边贴边居中,宽高皆不变
//EASYSIZE(IDC_BUTTON8,ES_BORDER,ES_BORDER,ES_BORDER,ES_BORDER,ES_VCENTER)  //改变宽度
//EASYSIZE(IDC_BUTTON8,ES_BORDER,ES_BORDER,ES_BORDER,ES_BORDER,ES_HCENTER)  //改变高度
EASYSIZE(IDC_BUTTON8,ES_BORDER,ES_BORDER,ES_BORDER,ES_BORDER,0)  //改变宽度和高度
//EASYSIZE(IDC_BUTTON8,ES_BORDER,ES_BORDER,ES_BORDER,ES_BORDER,
//ES_VCENTER|ES_HCENTER)//宽高不变
END_EASYSIZE_MAP



    显示如下图:

    初始:

QQ截图20170723013615.jpg

    最大化后:

QQ截图20170723013716.jpg







    


           另外还可以利用EasySize控制窗体的最小大小(操作过程中如果有不懂的配合底部的图片提示操作),比如缩放一个对话框限制一下最小缩放到什么地步,步骤如下,

1:首先在资源视图中为对话框添加上最大化最小化按钮,然后ClassWizard中选择Class Info标签,在Message fileter下拉列表中选择Window,然后再点击Message Maps标签,就出现WM_SIZING消息了,添加该消息的响应函数:void CTestDlg::OnSizing(UINT fwSide, LPRECT pRect) 

QQ截图20170723014148.jpg

QQ截图20170723014518.jpg

2:在函数结尾添加EASYSIZE_MINSIZE(600, 400, fwSide, pRect);第一个数字表示宽度,第二个表示高度。


  

QQ截图20170723014607.jpg

本篇完。

呃 本文暂时没人评论 来添加一个吧

发表评论

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。