MFC之CRect详解

news/2024/4/19 17:39:28/文章来源:https://blog.csdn.net/m0_61629312/article/details/130372844

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.luyixian.cn/news_show_103495.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 命令之 tar -czvf和 tar -xzvf

文章目录 一、概述:二、基础知识 一、概述: tar 用于linux 系统中压缩和解压 二、基础知识 tar常用命令参数说明 tar命令的czvf/xzvf参数分别代表的意义如下: -c 或–create 建立新的备份文件。 -x或–extract或–get 从备份文件中还原文件…

SparkStreaming学习之——无状态与有状态转化、遍历kafka的topic消息、WindowOperations

目录 一、状态转化 二、kafka topic A→SparkStreaming→kafka topic B (一)rdd.foreach与rdd.foreachPartition (二)案例实操1 1.需求: 2.代码实现: 3.运行结果 (三)案例实操2 1.需求: 2.代码实现: 3.运行结果 三、W…

Eclipse代码提示突然失灵的解决方案

不知道改动了啥,突然间Eclipse的代码提示就失效了,发现缺少后极不方便。 使用快捷键:Alt/ 提示 No Default Proposals 为什么使用快捷键:Alt/ 会提示“No Default Proposals。”呢? 网上提示可能是热键冲突 但是一套…

数据可视化大屏电商数据展示平台开发实录(Echarts柱图曲线图、mysql筛选统计语句、时间计算、大数据量统计)

数据可视化大屏电商数据展示平台 一、前言二、项目介绍三、项目展示四、项目经验分享4.1 翻牌器4.1.1 翻牌器-今日实时交易4.1.2.翻牌器后端统计SUM函数的使用 4.2 不同时间指标的数据MySql内部的时间计算 4.3 实时交易播报MySql联表查询和内部遍历循环 4.4 每日交易量4.4.1.近…

5.5 高斯型求积公式简历

学习目标: 我会按照以下步骤学习高斯求积公式简介: 理解积分的概念:学习什么是积分以及积分的几何和物理意义,如面积、质量、电荷等概念。 掌握基本的积分技巧:掌握基本的积分公式和技巧,如换元法、分部积…

流辰信息微服务平台:数字化转型的优良工具!

在互联网迅猛发展的今天,越来越多的企业倾向于新兴领域带来的便利性和灵活性了,其中,微服务平台就是其中之一了。流辰信息微服务平台是专注于研发系统开发、数据治理、数据分析的平台,致力于为各中大小型企业提供优质的微服务解决…

Java——字符串的排列

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

打造卓越游戏 | 2023 Google 游戏开发者峰会

一款游戏从初始构想的开发到辉煌赛季的策划,开发者们每时每刻都在倾注心血潜心钻研,Google 也致力于在整个开发和发布生命周期中为您提供帮助。我们很高兴能在今年如约而至的 Google 游戏开发者峰会中与您分享诸多更新,展示我们为助力您打造精…

如何有效的开展接口自动化测试,一篇就行

一、简介 接口自动化测试是指使用自动化测试工具和脚本对软件系统中的接口进行测试的过程。其目的是在软件开发过程中,通过对接口的自动化测试来提高测试效率和测试质量,减少人工测试的工作量和测试成本,并且能够快速发现和修复接口错误&…

PCL点云库(2) — IO模块

目录 2.1 IO模块接口 2.2 PCD数据读写 (1) PCD数据解析 (2)PCD文件读写示例 2.3 PLY数据读写 (1)PLY数据解析 (2)PLY文件读写示例 2.4 OBJ数据读写 (1&#xff…

C语言指针2大问题:指针类型有什么用?指针如何运算?

如题,本篇博客主要解决2个疑点:指针类型的用处,指针如何运算。 1.指针类型 C语言中的指针类型,在X86环境下大小是4个字节,在X64环境下大小是8个字节。既然指针的大小和指针类型无关,那么指针类型究竟有什么…

银行系统【GUI/Swing+MySQL】(Java课设)

系统类型 Swing窗口类型Mysql数据库存储数据 使用范围 适合作为Java课设!!! 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 ​​​​​​​ 本系统源码地址:​​​​​​​https://download.csdn.net/download/qq_50…

从零开始写ChatGLM大模型的微调代码

cursor 的下载及安装(免费版每月100次,升级pro 20刀/月) cursor是一款与openai合作的,使用gpt-4的一款编程工具,它可以让你通过gpt-4进行辅助编程,以此提高效率。 下载地址:https://www.curso…

USART串口协议和USART串口外设(USART串口发送串口发送和接收)

1、通信接口 • 通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统 • 通信协议:制定通信的规则,通信双方按照协议规则进行数据收发 异步:需要双方约定一个频率 2、 硬件电路 • 简单双向串口通信有两根通信…

【Unity-ML】Unity机器学习(一)

安装环境:Windows10 Anaconda3(64-bit),网上很多教程,例如这个anaconda下载及安装(保姆级教程) - 知乎anaconda包管理器和环境管理器,强烈建议食用 1.下载官网下载太慢可选用镜像下载 官网下载: Anaconda | Individua…

〖ChatGPT实践指南 - 零基础扫盲篇④〗- OpenAI API 相关介绍、提示-Prompt 与 完成-Completion

文章目录 ⭐ OpenAI API介绍⭐ 提示-Prompt 与 完成-Completion 介绍 这一章节将为各位小伙伴介绍一下 OpenAI 的 API 相关内容,以及在 ChatGPT 中两个经常被用来比较的名词:“提示-prompt” 与 “完成-completion”。 ⭐ OpenAI API介绍 OpenAI API 概…

JavaScript常用方法整理

文章目录 前言1.栈方法:push()、pop()2.队列方法:unshift()、shift()3.indexof()、lastIndexOf()、includes()4.操作方法:concat()、slice()、splice()5.Array.isArray()6.排序方法:sort()、reverse()7.转换方法:toString()、join…

【Winform学习笔记(二)】TextBox文本框实现按回车键触发Button事件

TextBox文本框实现按回车键触发Button事件 前言正文1、实现方法2、具体代码3、实现效果 前言 在本文中主要介绍 如何基于 Winform 框架实现 TextBox 文本框实现按回车键触发 Button 事件,该功能可实现在文本框中输入密码后不需要按登录或确定按钮,直接回…

vue页面内嵌iframe使用postMessage进行数据交互(postMessage跨域通信)

什么是postMessage postMessage是html5引入的API,它允许来自不同源的脚本采用异步方式进行有效的通信,可以实现跨文本文档,多窗口,跨域消息传递.多用于窗口间数据通信,这也使它成为跨域通信的一种有效的解决方案. vue父页面(嵌入iframe的页面) 在vue中…

webAPI学习笔记2(DOM事件高级)

1. 注册事件&#xff08;绑定事件&#xff09; 1.1 注册事件概述 给元素添加事件&#xff0c;称为注册事件或者绑定事件。 注册事件有两种方式&#xff1a;传统方式和方法监听注册方式 传统注册方式 利用 on 开头的事件 onclick <button οnclick“alert(hi~)”><…