这一篇介绍的是怎么实现MFC窗口的最大最小化,以及里面控件大小也随之改变

第一步:实现窗口最大最小化

首先右击窗口空白处,打开properties,将里面的MaximizeBox和MinimizeBox都选择为true,这时候窗口已经有最大最小化了,不过控件大小却不变

第二步:实现控件大小位置变化

右击窗口空白处,打开类视图(Class Wizard)--> 点击选项Messages --> 找到WM_SIZE选中 --> 添加处理程序(Add handler)--> 编辑代码(Edit code)

在这个函数里面添加如下代码

  1. void CframestudyDlg::OnSize(UINT nType, int cx, int cy)
  2. {
  3. CDialogEx::OnSize(nType, cx, cy);
  4.  
  5. // TODO: Add your message handler code here
  6. if (nType == SIZE_RESTORED || nType == SIZE_MAXIMIZED) {
  7. resize();
  8. }
  9. }

其中resize()函数需要我们自己添加,这是一个自定义的函数,在上面函数下添加就可以了,当然没有硬性要求

  1. void CframestudyDlg::resize()
  2. {
  3. float fsp[2];
  4. POINT Newp; //获取现在对话框的大小
  5. CRect recta;
  6. GetClientRect(&recta); //取客户区大小
  7. Newp.x = recta.right - recta.left;
  8. Newp.y = recta.bottom - recta.top;
  9. fsp[0] = (float)Newp.x / Old.x;
  10. fsp[1] = (float)Newp.y / Old.y;
  11. CRect Rect;
  12. int woc;
  13. CPoint OldTLPoint, TLPoint; //左上角
  14. CPoint OldBRPoint, BRPoint; //右下角
  15. HWND hwndChild = ::GetWindow(m_hWnd, GW_CHILD); //列出所有控件
  16. while (hwndChild)
  17. {
  18. woc = ::GetDlgCtrlID(hwndChild);//取得ID
  19. GetDlgItem(woc)->GetWindowRect(Rect);
  20. ScreenToClient(Rect);
  21. OldTLPoint = Rect.TopLeft();
  22. TLPoint.x = long(OldTLPoint.x*fsp[0]);
  23. TLPoint.y = long(OldTLPoint.y*fsp[1]);
  24. OldBRPoint = Rect.BottomRight();
  25. BRPoint.x = long(OldBRPoint.x *fsp[0]);
  26. BRPoint.y = long(OldBRPoint.y *fsp[1]);
  27. Rect.SetRect(TLPoint, BRPoint);
  28. GetDlgItem(woc)->MoveWindow(Rect, TRUE);
  29. hwndChild = ::GetWindow(hwndChild, GW_HWNDNEXT);
  30. }
  31. Old = Newp;
  32.  
  33. }

resize()前面CframestudyDlg是自己的函数名,跟你创建时其他函数前缀保持一致就好。

写完函数后,要在.h文件里面写上函数原型。

打开frame_studyDlg.h

在public部分添加

  1. POINT Old;
  2. void resize();

最后一步就是要在onInitDialog()函数里面添加一段代码,里面会有一句“TODO: Add extra initialization here”这一句,在下面添加即可。

  1. // TODO: Add extra initialization here
  2. CRect rect;
  3. GetClientRect(&rect);//取客户区大小
  4. Old.x = rect.right - rect.left;
  5. Old.y = rect.bottom - rect.top;

现在,大功告成了。

第十一篇 -- 如何实现MFC窗口的最大化以及控件随最大化的更多相关文章

  1. VC/MFC 当鼠标移到控件上时显示提示信息

    VC/MFC 当鼠标移到控件上时显示提示信息 ToolTip是Win32中一个通用控件,MFC中为其生成了一个类CToolTipCtrl,总的说来其使用方法是较简单的,下面讲一下它的一般用法和高级用法 ...

  2. 笨重的mfc还在基于系统控件,熟练的mfc工程师还比不过学习Qt一个月的学生开发效率高(比较精彩,韦易笑)

    作者:韦易笑链接:https://www.zhihu.com/question/29636221/answer/45102191来源:知乎著作权归作者所有,转载请联系作者获得授权. 更新:擦,本来只有 ...

  3. WPF 程序如何跨窗口/跨进程设置控件焦点

    原文:WPF 程序如何跨窗口/跨进程设置控件焦点 WPF 程序提供了 Focus 方法和 TraversalRequest 来在 WPF 焦点范围内转移焦点.但如果 WPF 窗口中嵌入了其他框架的 U ...

  4. 在C#中子线程如何操作主窗口线程上的控件

    在C#中子线程怎样操作主线程中窗口上控件 在C#中,直接在子线程中对窗口上的控件操作是会出现异常,这是因为子线程和运行窗口的线程是不同的空间,因此想要在子线程来操作窗口上的控件.是不可能简单的通过控件 ...

  5. MFC 对话框Picture Control(图片控件)中静态和动态显示Bmp图片

    版权声明:本文为博主原创文章,转载请注明CSDN博客源地址! 共同学习,一起进步~ https://blog.csdn.net/Eastmount/article/details/26404733   ...

  6. [转]MFC子线程中更新控件内容的两种办法

    一.概述 每个系统中都有线程(至少都有一个主线程),而线程最重要的作用就是并行处理,提高软件的并发率.针对界面来说,还能提高界面的响应能力.一般的,为了应用的稳定性,在数据处理等耗时操作会单独在一个线 ...

  7. 【VS开发】使用MFC创建并调用ActiveX控件

    使用MFC创建并调用ActiveX控件 今天做了一下ActiveX的使用测试,总结一下: 首先使用MFC创建一个activeX的控件譬如ActiveXTest,编译成ocx并注册,然后另外编写一个测试 ...

  8. MFC的Spin Control基础控件的使用

    1.向GUI界面添加一个MFC 提供的Spin数值调节控件 2.设置其"伙伴“,并设置数值调节的范围 3.如何让数值显示在文本框中?你可以有多种选择:可以让文本框控件绑定一个数值类型的变量: ...

  9. MFC实现 自适应操作系统的CListCtrl控件

    新建对话框应用程序,删除自动生成的控件后,拖拽一个CListCtrl控件,绑定变量名为:m_listctrl.在对话框初始化成员函数OnInitDialog()中键入以下代码即可实现自适应系统的CLi ...

随机推荐

  1. js正则中文

    hi,大家好 今天跟小伙伴们浅谈以下如何用正则表示中文以及如何去运用.众所周知中文在计算机中是不能进行存储的.那我们是以什么办法让我们和计算机进行更好的沟通呢?常用的几种中文编码格式utf-8编码ut ...

  2. jd一面面经

    1.讲一下hashmap原理. 2.concurrentHashMap的原理.concurrentHashMap和hashmap有什么不同? 3.synchnized底层实现?讲讲AQS 4.sync ...

  3. 有效Ajax案例

    <script>$(document).ready(function(){ $("input:submit").click(function(){ $.ajax({ t ...

  4. NOIP模拟测试14「旋转子段·走格子·柱状图」

    旋转子段 连60分都没想,考试一直肝t3,t2,没想到t1最简单 我一直以为t1很难,看了题解发现也就那样 题解 性质1 一个包含a[i]旋转区间值域范围最多为min(a[i],i)----max(a ...

  5. 图解 Redis | 不多说了,这就是 RDB 快照

    大家好,我是小林. 虽说 Redis 是内存数据库. 但是它为数据的持久化提供了两个技术,分别是「 AOF 日志和 RDB 快照」. 这两种技术都会用各用一个日志文件来记录信息,但是记录的内容是不同的 ...

  6. 微信小程序电子签名实现

    实现签名方法就是使用canvas <canvas canvas-id="firstCanvas" id='firstCanvas' bindtouchstart=" ...

  7. 旋转的球(animation与 transform)

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  8. Java实现单例模式的几种方式

    单例模式(Singleton),保证在程序运行期间,内存中只有一个实例对象. 饿汉式,最常用的方式.JVM加载类到内存中时,创建实例,线程安全. public class Boss { private ...

  9. 02 jumpserver系统设置

    2.系统设置: (1)基本设置: (2)邮件设置: 1)163邮箱设置: 2)在jumpserver上填写邮箱信息: 3)邮件测试信息如下: (3)邮件内容设置: (4)终端设置: (5)安全设置:

  10. 38、mysql数据库(pymysql及事务)

    38.1.python之pymysql模块: 1.说明: pymsql是Python中操作MySQL的模块,其使用方法和py2的MySQLdb几乎相同. 2.模块安装: pip install pym ...