MFC之CRect详解

MFC之CRect详解2023 年 4 月 25 日 周二晚上

大家好,欢迎来到IT知识分享网。

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

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


CRect类

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

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

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

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

MFC之CRect详解

MFC之CRect详解 

MFC之CRect详解

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

CRect rc; GetClientRect(rc);

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

MFC之CRect详解

 所以,此时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

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

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

现在我会给出图片说明。

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

MFC之CRect详解

 

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

可以看到少了一个按钮…

MFC之CRect详解

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

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

 MFC之CRect详解

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/127673.html

(0)
上一篇 2025-09-05 21:15
下一篇 2025-09-05 21:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信