MFC之CRect详解

news2024/10/7 8:31:55

2023年4月25日,周二晚上。

今天查了不少关于CRect类及其相关内容的资料,学到了不少东西,所以我决定写一篇详细的关于CRect类及其相关内容的文章,以记录今天所学。


CRect类

在 MFC 中,CRect 类表示一个矩形区域。它是一个包含左上角坐标和右下角坐标的简单类。

CRect 包含以下四个成员变量:

  • int left:矩形区域左上角的 x 坐标。
  • int top:矩形区域左上角的 y 坐标。
  • int right:矩形区域右下角的 x 坐标。
  • int bottom:矩形区域右下角的 y 坐标。

在MFC中,CRect类表示矩形的坐标是相对于窗口客户区的左上角,也就是说原点在客户区的左上角。

 

 如果你通过下面这段代码获取到了上面这个窗口的客户区的CRect

CRect rc;
GetClientRect(rc);

那么你实际上,获得的是下面A、B这两点的坐标

 所以,此时rc的四个成员变量的值为:

  • rc.left=0
  • rc.top=0
  • rc.right=500
  • rc.bottom=300

 


CRect类的运用

CRect可以和MoveWindows搭配使用,来设置父窗口中客户区的子窗口的位置和大小。

这这里我只是说明大致的思路和需要注意的地方,下面的代码并不能单独运行。

int CMultiWinTestDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CDialogEx::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO:  在此添加您专用的创建代码

    //获取当前窗口的客户区大小
	CRect rc;
	GetClientRect(rc);
	dlg1 = new CDlg1();
    //以IDD_DIALOG1窗口为模版创建子窗口,并放入父窗口,this在这里指代父类窗口
	dlg1->Create(IDD_DIALOG1, this);
	dlg1->MoveWindow(0, 0,rc.right,rc.bottom);
	dlg1->ShowWindow(SW_SHOW);
	return 0;
}

首先,先用GetClientRect来获取父窗口客户区的大小

CRect rc;
GetClientRect(rc);

然后,用Create函数,以IDD_DIALOG1窗口为模版创建子窗口,并放入父窗口,this在这里指代父类窗口

dlg1 = new CDlg1();
dlg1->Create(IDD_DIALOG1, this);

在这里简单说一下Create函数:

BOOL Create(UINT nIDTemplate, CWnd* pParentWnd = NULL);
  • 参数 nIDTemplate:UINT 类型的资源 ID 号,用于指定要使用的对话框模板;
  • 参数 pParentWnd:CWnd 指针,指向包含该对话框的父级窗口。

然后,用MoveWindow函数设置子窗口的位置和大小,注意这个位置是相对于父窗口客户区的左上角来说的

dlg1->MoveWindow(0, 0,rc.right,rc.bottom);

这句代码的意思是,把子窗口移到坐标为(0,0)的地方,子窗口的宽度设置为rc.right、高度设置为rc.bottom

在这样我要特别说一句,那就是父窗口大小和子窗口大小的关系:

如果父窗口的客户区比要设置的子窗口更小,则会截取掉子窗口超过父窗口客户区大小的部分。如果父窗口的客户区比要设置的子窗口更大,则子窗口将被设置在父窗口客户区左上角,而且这样会使子窗口无法填满整个客户区,因此父窗口中剩余的部分将保持空白。

现在我会给出图片说明。

首先给你们看看子窗口是什么样的:

 

父窗口的客户区比要设置的子窗口更小:

可以看到少了一个按钮...

父窗口的客户区比要设置的子窗口更大

可以看到有很多空白的地方...

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/461246.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Vue 移动端开发】适配百分之99的屏幕方案

之前提起移动端适配,都是一些视口的概念,包括物理像素和逻辑像素,理想视口,dpr等等等。利用 media query 和 rem 是最常见的移动端适配方案。如下代码: const deviceWidth document.documentElement.clientWidth || …

Axure RP 9 for Mac 原型设计软件安装,Mac软件打开提示:已损坏,无法打开。您应该将它移到废纸篓。怎么解决?

Axure RP 9 for Mac 原型设计软件安装,Mac软件打开提示:已损坏,无法打开。您应该将它移到废纸篓。怎么解决? 安装过程很简单: 1、下载后先将软件拖入应用程序中; 2、打开软件,弹出登录界面,点…

网络编程代码实例:用户数据报协议(UDP)简单版

文章目录 前言代码仓库内容代码(有详细注释)server.cclient.cMakefile 结果总结参考资料作者的话 前言 网络编程代码实例:用户数据报协议(UDP)简单版。 代码仓库 yezhening/Environment-and-network-programming-exa…

[ICLR 2020] Reducing Transformer Depth on Demand with Structured Dropout

Contents IntroductionTraining Transformers with Random Structured PruningRandomly Dropping Structures at Training TimePruning at Inference Time ExperimentsReferences Introduction 作者提出了一种新的 structural pruning 方法 LayerDrop,通过在训练时…

FastDFS集群搭建

简介 FastDFS是什么?我们这里可以看一下度娘的解释。FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量…

Python base64模块加密解密

一、为何使用base64加密解密 为了安全机制的系统,在用户登录的时候,会采用一系列措施保护用户信息,防止程序被攻击,比如:将用户输入的密码加密处理,在控制台看请求接口看到的密码是加密过的密码&#xff0c…

前端 Chrome 插件推荐

1.Ajax Interceptor 场景: 1.前端本地在开发,后端接口还没好,可以提前mock数据,并且真实的模拟网络请求。可以对代码不侵入的方式,提高编码效率。后面真实联调速度就会快很多。 2.当你参与项目的一部分开发的时候&a…

WPF实现PasswordBox切换明密功能

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

生产mysql遇到kill不掉的sql的解决方法

一、问题描述 今天上线,生产mysql有个2700万数据的大表lt_integral_detail_info,准备给这个表加字段、加索引; 执行加字段加索引的命令比较费时,结果这时有人对这个表执行了多个select count(*)操作,导致直接把Navic…

SQL优化(5):limit优化

在数据量比较大时,如果进行limit分页查询,在查询时,越往后,分页查询效率越低。 我们一起来看看执行limit分页查询耗时对比: 找一个有1000W数据量的表进行测试分析 查询前10条数据分页,耗时0.03秒 查询100…

【力扣】二叉树的分层遍历1和2

二叉树的分层遍历1 链接:二叉树的分层遍历1: 首先,我们需要知道什么是二叉树的层序遍历。二叉树的层序遍历是一种按照树的层次从上到下,从左到右访问每个节点的方法。例如,对于下面这棵二叉树: 1/ \2 3…

Linux_红帽8学习笔记分享_7(Crontab计划任务+NTP时间同步服务器)

Linux_红帽8学习笔记分享_7(Crontab计划任务NTP时间同步服务器) 文章目录 Linux_红帽8学习笔记分享_7(Crontab计划任务NTP时间同步服务器)1. 系统时间1.1查看系统时间1.2设置系统时间 2.周期性计划任务2.1认识周期性任务服务2.2寻找定时文件的配置文件2.3用户定时任务的格式2.4…

行业方案|智能网联汽车数据安全治理框架

近年来,信息技术的快速发展,加快了汽车产业的变革。与此同时,随着智能化、网联化的推进,汽车的数据安全问题也日益凸显。当下,如何保障数据安全,成为影响智能汽车产业健康发展的关键问题。 4月18日&#x…

Linux Ansible创建任务并执行

目录 通过add-hoc执行anbise任务 通过Playbook剧本方式执行任务 Playbook包含的常用对象 Yaml语法 对Yaml格式自动对齐 Playbook语法检测与执行 Playbook任务实施 Playbook特权升级 Playbook常用模块 软件包管理模块 用户管理模块 存储模块管理 文件操作相关模块 …

GPT-3 论文阅读笔记

GPT-3模型出自论文《Language Models are Few-Shot Learners》是OpenAI在2020年5月发布的。 论文摘要翻译:最近的工作表明,通过对大量文本进行预训练,然后对特定任务进行微调(fine-tuning),在许多NLP任务和基准测试上…

TYPE-C口是怎么样的接口?它有什么功能强大的地方?

C口指的是USBType-C接口。USBType-C,又称USB-C,是一种通用串行总线(USB)的硬件接口形式,外观上最大特点在于其上下端完全一致与Micro-USB相比不再区分USB正反面。 认识了Type-C的外观之后,我们来一起看一下它是怎么产生的。早在20…

QT with OpenGL(IBL-镜面反射)

文章目录 预滤波generate Mipmap获取每一层级的预滤波图prefilterMap Shader重要性采样效果展示 预过滤卷积的亮点解决方法代码解析首先得确保我们被采样的环境贴图有mipmap贴图通过计算决定使用那一层mipmap值 效果 预计算BRFD生成LUT图 IBL Shading渲染结果与教材的不同最终结…

(C语言版)力扣(LeetCode)189. 轮转数组官方3种解法分析

轮转数组 题目第一种解法:额外数组第二种解法:环状替换第三种解法:翻转数组结语 题目 题目链接:轮转数组 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: num…

实战项目:手把手带你实现一个高并发内存池

项目介绍 1.这个项目做的是什么? 当前项目是实现一个高并发的内存池,他的原型是google的一个开源项目tcmalloc,tcmalloc全称Thread-Caching Malloc,即线程缓存的malloc,实现了高效的多线程内存管理,用于替…

Java——字符串的排列

题目链接 牛客网在线oj题——字符串的排列 题目描述 输入一个长度为 n 字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组。 例如输入字符串ABC,则输出由字符A,B,C所能排列出来的所有字符串ABC,ACB,BAC,BCA,CBA和CAB。 数…