VC窗口自由的调整大小的实现。具体代码和详细的英文说明,大家可以看 原文 ,本篇是使用后的具体细节说明。

1,将在对话框的属性里设置 边框可调整大小的

2,在主窗体cpp添加 #include EasySize.h ,也可以按照原创的方法添加到 stdafx.h中

3,在定义主窗体的地方

以下是引用片段:
class CEasySizeDemoDlg : public CDialog
{
DECLARE_EASYSIZE //添加这个,如果添加后编译错误,参考步骤2。

4,在主窗体的OnInitDialog消息函数中

以下是引用片段:
BOOL CEasySizeDemoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
...
INIT_EASYSIZE; //添加这个
return TRUE; // return TRUE unless you set the focus to a control
}

5,重载消息WM_SIZE消息函数

以下是引用片段:
void CEasySizeDemoDlg::OnSize(UINT nType, int cx, int cy)
{

CDialog::OnSize(nType, cx, cy);

UPDATE_EASYSIZE; //添加这个

}

6,如果你希望窗口在调整大小的时候限制最大不能超过多少,最小不能小于多少可以重载onsizing消息

这个消息好象不能在类向导里直接添加,其实是可以的。当然,你要是嫌麻烦的话,就如下做:

直接在:

以下是引用片段:
ON_WM_SIZE();下面再添加了这个
ON_WM_SIZING() ;

然后查找到:

以下是引用片段:
afx_msg void OnSize(UINT nType, int cx, int cy);下面再添加了这个
afx_msg void OnSizing(UINT fwSide, LPRECT pRect);

再添加事件处理函数:

以下是引用片段:
void CEasySizeDemoDlg::OnSizing(UINT fwSide, LPRECT pRect)
{
CDialog::OnSizing(fwSide, pRect);
EASYSIZE_MINSIZE(280,250,fwSide,pRect); //280,250是最小尺寸,
//如果想拥有最大尺寸功能可以修改EasySize.h,仿照EASYSIZE_MINSIZE的方法写个最大限制的。
}

当然,你也可以用类向导来做的:类向导—>classinfo(类信息)—>Messagefilter—>Windows

好了,然后你再回到Message maps里面去看message是不是里面就有了你要的WM_SIZING了,^_^!

7,最后添加 消息映射

以下是引用片段:
BEGIN_EASYSIZE_MAP( your main dialog name) //这里修改成主窗体类名
...
//这里针对每个需要在调整窗体大小时调整大小位置的控件添加处理函数
EASYSIZE(control,left,top,right,bottom,options) //这里的control写控件的id号
//left:如果要保持与主窗体左边位置固定可以写ES_BORDER,如果要保持大小不变,此处不加特殊处理,写ES_KEEPSIZE,如果要以其他空间的左边,作为基准可以写该控件的id号
//top,right,bottom同上
//options控制水平垂直居中效果,如ES_HCENTER|ES_VCENTER ,无特殊写0
...
END_EASYSIZE_MAP

具体EASYSIZE(control,left,top,right,bottom,options) 的用法:

其中:control为对话框中的控件ID值,left,top,right,bottom四个参数为控件位置的坐标,其值可以选择ES_BOARD, ES_KEEPSIZE, 控件ID值三者之一。Options可以为ES_HCENTER, ES_VCENTER的结合,options可置0。

1.   ES_BOARD表示控件与对话框边界(以下简称边界)的距离;
   2.   ES_KEEPSIZE表示控件水平/垂直方向上尺寸保持不变;
   3.   控件ID值表示当前控件与指定控件之间的距离;
   4.   ES_HCENTER表示缩放后控件在指定位置内水平居中;
   5.   ES_VCENTER表示缩放后控件在指定位置内垂直居中;

例如:

EASYSIZE(IDOK,ES_BORDER,ES_BORDER,ES_BORDER,ES_BORDER,0)

表示缩放后,值为IDOK的控件,距离边界上下左右位置保持不变,水平和垂直方向尺寸拉伸;

EASYSIZE(IDOK,ES_BORDER,ES_BORDER,ES_BORDER,ES_BORDER,ES_HCENTER)

表示缩放后,值为IDOK的控件,距离边界上下位置保持不变,垂直方向尺寸拉伸,水平居中;

EASYSIZE(IDOK,ES_BORDER,ES_BORDER,ES_BORDER,ES_BORDER,ES_HCENTER| ES_HCENTER)

表示缩放后,值为IDOK的控件,在对话框内垂直居中,水平居中;

EASYSIZE(IDOK,ES_BORDER,ES_KEEPSIZE,ES_KEEPSIZE,ES_BORDER,0)

表示缩放后,值为IDOK的控件,距离边界左、下方位置保持不变,同时保持控件尺寸;

EASYSIZE(IDOK,ES_BORDER,ES_KEEPSIZE, ES_BORDER,ES_BORDER,0)

表示缩放后,值为IDOK的控件,距离边界左、右、下方位置保持不变,水平方向尺寸拉伸,垂直方向尺寸不变;

EASYSIZE(IDOK,ES_BORDER,ES_BORDER,IDCANCEL,ES_BORDER,0)

表示缩放后,值为IDOK的控件,距离边界上下左位置保持不变,距离ID值为IDCANCEL的右方位置距离保持不变,水平和垂直方向尺寸拉伸;

(当使用指定控件作为定位参数时候,确保指定控件的EASYSIZE在该宏前面)

VC窗口自由的调整大小的实现相关推荐

  1. QMdiArea中多个小窗口如何自动调整大小以挤满整个窗口界面?(tile/cascade)

    QMdiArea中多个小窗口如何自动调整大小以挤满整个窗口界面? 您可以使用 QMdiArea.tileSubWindows() 方法,它会自动将所有的子窗口在 QMdiArea 中平铺,并将它们的大 ...

  2. VC窗口刷新InvalidateRect和…

    学习了 原文地址:VC窗口刷新InvalidateRect和UpdateWindow 作者:玩世不恭 首先说说WM_PAINT这个重要的消息: The WM_PAINT message is gene ...

  3. 最简单的方式实现QML无边框窗口边缘拖动调整大小

    前言 使用Qt在开发桌面程序时,通常会去除默认的程序边框,从而实现自定义的标题栏.然而当设置窗口属性为Qt.FramelessWindowHint后,窗口的拖动,以及在边缘拖动缩放的功能就没有了,在以 ...

  4. VC++窗口对象和句柄

    句柄是窗口资源的标识,它标识资源在系统中所占用的内存块,应用程序通过窗口句柄对窗口进行操作.除了窗口句柄之外,任何一种资源都有它自己的句柄,比如光标句柄.位图句柄等.窗口ID是窗口在应用程序中的唯一标 ...

  5. 【转】VC窗口刷新InvalidateRect和UpdateWindow RedrawWindow

    首先说说WM_PAINT 这个重要的消息: The WM_PAINT message is generated by the system and should not be sent by an a ...

  6. python命令窗口代码如何调整大小_如何调整python窗口(Tkinter)大小

    调整python窗口大小的方法:1.输入"import tkinter"命令导入tk模块,"win=tkinter.TK()"命令创建窗口:2.输入" ...

  7. python命令窗口代码如何调整大小_可调整窗口大小命令pythonmay

    自从我开始用Python编写脚本以来,我就一直有这个问题.在 即使我在主"窗口"命令中添加了"宽度"和"高度"标志,大小总是根据最近的操作进 ...

  8. 【 Visual C++】游戏开发笔记之二——最简单的DirectX,vc窗口的编写

    笔记一中我们介绍了如何用代码创建空的win32窗口,然而创建空的win32窗口只完成了一半的工作,接下来要做的工作是设置Direct3D,从而可以在屏幕上渲染图形. Direct3D要调用很多函数才能 ...

  9. VC窗口形状的绘制---SetWindowRgn

    #define PICWIDTH    365 #define PICHEIGHT   160 //CRgn Test;     //X1,Y1 ---------- Long,矩形左上角X,Y坐标 ...

最新文章

  1. 天下程序员苦文档久已 | 《活文档》第一波短评
  2. 根据html页面模板动态生成html页面(c#类)
  3. 神策数据 2018 校招启程了!
  4. 时频分析:短时傅立叶变换实现(4)
  5. Flask-RESTful 安装
  6. mysql 预留一个自定义字段_mysql-预留字段
  7. jq之fadeOut()
  8. Windows Phone开发(8):关于导航的小技巧
  9. 没有任何一个行业是没有竞争的
  10. 安卓也是html写的么,css能判断手机是安卓还是ios吗?
  11. 2014最不受欢迎10编程语言种
  12. 基于CentOS7配置ArcGIS enterprise
  13. 多媒体互动项目-Unity与继电器数据交互
  14. oracle中on和where的区别,Oracle里面的外连中where和on之后and有啥区别
  15. 算术平均数、几何平均数、调和平均数的、标准差、方差、正态分布、异常值噪声处理
  16. 网页 游戏服务器连接超时,连接游戏服务器超时怎么解决
  17. DNS资源纪录(Resource Record)介绍
  18. 微信小程序推广方式有哪些?
  19. 今日头条阅读量怎么刷_今日头条阅读量怎么刷 今日头条怎么增加阅读量
  20. 对keep-alive的理解,它是如何实现的,具体缓存的是什么?

热门文章

  1. pyhton机器学习与数据挖掘 -- 线性回归
  2. 逻辑斯第回归、softmax分类与多层感知器
  3. Digital Pixel 杂志 Joomla模板 joomla摄影艺术数码作品博客商业
  4. 人脸识别SeetaFace2原理与代码详解
  5. 笔记本WIN10 网络和Internet WLAN选项消失
  6. 基于windows 10打造的kali工具集-ICS Windows v2.0
  7. TeamViewer:“未就绪,请检查您的网络连接“
  8. JAVA应用程序转换为Applet
  9. 流水车间调度问题混合整数规划模型
  10. 使用Python的turtle模块绘制爱心图案