第十一篇 -- 如何实现MFC窗口的最大化以及控件随最大化
这一篇介绍的是怎么实现MFC窗口的最大最小化,以及里面控件大小也随之改变
第一步:实现窗口最大最小化
首先右击窗口空白处,打开properties,将里面的MaximizeBox和MinimizeBox都选择为true,这时候窗口已经有最大最小化了,不过控件大小却不变
第二步:实现控件大小位置变化
右击窗口空白处,打开类视图(Class Wizard)--> 点击选项Messages --> 找到WM_SIZE选中 --> 添加处理程序(Add handler)--> 编辑代码(Edit code)
在这个函数里面添加如下代码
- void CframestudyDlg::OnSize(UINT nType, int cx, int cy)
- {
- CDialogEx::OnSize(nType, cx, cy);
- // TODO: Add your message handler code here
- if (nType == SIZE_RESTORED || nType == SIZE_MAXIMIZED) {
- resize();
- }
- }
其中resize()函数需要我们自己添加,这是一个自定义的函数,在上面函数下添加就可以了,当然没有硬性要求
- void CframestudyDlg::resize()
- {
- float fsp[2];
- POINT Newp; //获取现在对话框的大小
- CRect recta;
- GetClientRect(&recta); //取客户区大小
- Newp.x = recta.right - recta.left;
- Newp.y = recta.bottom - recta.top;
- fsp[0] = (float)Newp.x / Old.x;
- fsp[1] = (float)Newp.y / Old.y;
- CRect Rect;
- int woc;
- CPoint OldTLPoint, TLPoint; //左上角
- CPoint OldBRPoint, BRPoint; //右下角
- HWND hwndChild = ::GetWindow(m_hWnd, GW_CHILD); //列出所有控件
- while (hwndChild)
- {
- woc = ::GetDlgCtrlID(hwndChild);//取得ID
- GetDlgItem(woc)->GetWindowRect(Rect);
- ScreenToClient(Rect);
- OldTLPoint = Rect.TopLeft();
- TLPoint.x = long(OldTLPoint.x*fsp[0]);
- TLPoint.y = long(OldTLPoint.y*fsp[1]);
- OldBRPoint = Rect.BottomRight();
- BRPoint.x = long(OldBRPoint.x *fsp[0]);
- BRPoint.y = long(OldBRPoint.y *fsp[1]);
- Rect.SetRect(TLPoint, BRPoint);
- GetDlgItem(woc)->MoveWindow(Rect, TRUE);
- hwndChild = ::GetWindow(hwndChild, GW_HWNDNEXT);
- }
- Old = Newp;
- }
resize()前面CframestudyDlg是自己的函数名,跟你创建时其他函数前缀保持一致就好。
写完函数后,要在.h文件里面写上函数原型。
打开frame_studyDlg.h
在public部分添加
- POINT Old;
- void resize();
最后一步就是要在onInitDialog()函数里面添加一段代码,里面会有一句“TODO: Add extra initialization here”这一句,在下面添加即可。
- // TODO: Add extra initialization here
- CRect rect;
- GetClientRect(&rect);//取客户区大小
- Old.x = rect.right - rect.left;
- Old.y = rect.bottom - rect.top;
现在,大功告成了。
第十一篇 -- 如何实现MFC窗口的最大化以及控件随最大化的更多相关文章
- VC/MFC 当鼠标移到控件上时显示提示信息
VC/MFC 当鼠标移到控件上时显示提示信息 ToolTip是Win32中一个通用控件,MFC中为其生成了一个类CToolTipCtrl,总的说来其使用方法是较简单的,下面讲一下它的一般用法和高级用法 ...
- 笨重的mfc还在基于系统控件,熟练的mfc工程师还比不过学习Qt一个月的学生开发效率高(比较精彩,韦易笑)
作者:韦易笑链接:https://www.zhihu.com/question/29636221/answer/45102191来源:知乎著作权归作者所有,转载请联系作者获得授权. 更新:擦,本来只有 ...
- WPF 程序如何跨窗口/跨进程设置控件焦点
原文:WPF 程序如何跨窗口/跨进程设置控件焦点 WPF 程序提供了 Focus 方法和 TraversalRequest 来在 WPF 焦点范围内转移焦点.但如果 WPF 窗口中嵌入了其他框架的 U ...
- 在C#中子线程如何操作主窗口线程上的控件
在C#中子线程怎样操作主线程中窗口上控件 在C#中,直接在子线程中对窗口上的控件操作是会出现异常,这是因为子线程和运行窗口的线程是不同的空间,因此想要在子线程来操作窗口上的控件.是不可能简单的通过控件 ...
- MFC 对话框Picture Control(图片控件)中静态和动态显示Bmp图片
版权声明:本文为博主原创文章,转载请注明CSDN博客源地址! 共同学习,一起进步~ https://blog.csdn.net/Eastmount/article/details/26404733 ...
- [转]MFC子线程中更新控件内容的两种办法
一.概述 每个系统中都有线程(至少都有一个主线程),而线程最重要的作用就是并行处理,提高软件的并发率.针对界面来说,还能提高界面的响应能力.一般的,为了应用的稳定性,在数据处理等耗时操作会单独在一个线 ...
- 【VS开发】使用MFC创建并调用ActiveX控件
使用MFC创建并调用ActiveX控件 今天做了一下ActiveX的使用测试,总结一下: 首先使用MFC创建一个activeX的控件譬如ActiveXTest,编译成ocx并注册,然后另外编写一个测试 ...
- MFC的Spin Control基础控件的使用
1.向GUI界面添加一个MFC 提供的Spin数值调节控件 2.设置其"伙伴“,并设置数值调节的范围 3.如何让数值显示在文本框中?你可以有多种选择:可以让文本框控件绑定一个数值类型的变量: ...
- MFC实现 自适应操作系统的CListCtrl控件
新建对话框应用程序,删除自动生成的控件后,拖拽一个CListCtrl控件,绑定变量名为:m_listctrl.在对话框初始化成员函数OnInitDialog()中键入以下代码即可实现自适应系统的CLi ...
随机推荐
- js正则中文
hi,大家好 今天跟小伙伴们浅谈以下如何用正则表示中文以及如何去运用.众所周知中文在计算机中是不能进行存储的.那我们是以什么办法让我们和计算机进行更好的沟通呢?常用的几种中文编码格式utf-8编码ut ...
- jd一面面经
1.讲一下hashmap原理. 2.concurrentHashMap的原理.concurrentHashMap和hashmap有什么不同? 3.synchnized底层实现?讲讲AQS 4.sync ...
- 有效Ajax案例
<script>$(document).ready(function(){ $("input:submit").click(function(){ $.ajax({ t ...
- NOIP模拟测试14「旋转子段·走格子·柱状图」
旋转子段 连60分都没想,考试一直肝t3,t2,没想到t1最简单 我一直以为t1很难,看了题解发现也就那样 题解 性质1 一个包含a[i]旋转区间值域范围最多为min(a[i],i)----max(a ...
- 图解 Redis | 不多说了,这就是 RDB 快照
大家好,我是小林. 虽说 Redis 是内存数据库. 但是它为数据的持久化提供了两个技术,分别是「 AOF 日志和 RDB 快照」. 这两种技术都会用各用一个日志文件来记录信息,但是记录的内容是不同的 ...
- 微信小程序电子签名实现
实现签名方法就是使用canvas <canvas canvas-id="firstCanvas" id='firstCanvas' bindtouchstart=" ...
- 旋转的球(animation与 transform)
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- Java实现单例模式的几种方式
单例模式(Singleton),保证在程序运行期间,内存中只有一个实例对象. 饿汉式,最常用的方式.JVM加载类到内存中时,创建实例,线程安全. public class Boss { private ...
- 02 jumpserver系统设置
2.系统设置: (1)基本设置: (2)邮件设置: 1)163邮箱设置: 2)在jumpserver上填写邮箱信息: 3)邮件测试信息如下: (3)邮件内容设置: (4)终端设置: (5)安全设置:
- 38、mysql数据库(pymysql及事务)
38.1.python之pymysql模块: 1.说明: pymsql是Python中操作MySQL的模块,其使用方法和py2的MySQLdb几乎相同. 2.模块安装: pip install pym ...