MFC 窗口的位置GetWindowRect/MoveWindow/Onsize等(转)

父对话框的整个窗口区=父对话框客户区+父对话框标题栏区

1. GetWindowRect()获取的是以屏幕左上角为(0,0)点的窗口区域,是屏幕坐标系。

①  如果对父对话框调用GetWindowRect(),那么获取的矩形为父窗口在屏幕中的区域,其中矩形区含标题栏以及外边框。

②  如果对控件调用GetWindowRect(),那么获取的矩形是控件在屏幕中的区域。

注意在对话框的OnInitDialog()函数中,由于对话框尚未显示,所以默认对话框左上角位于屏幕左上角。即此时调用GetWindowRect()获取的对话框区域左上角为(0,0)。

2. GetClentRect()获取的是自身客户区,其左上角以自身客户区的左上角为(0,0)。

①   如果对父对话框调用GetClentRect (),那么获取的矩形为(0,0,客户区宽, ,客户区高),不含标题栏及边框。

②  如果对控件调用GetClentRect (),那么获取的矩形是控件自身大小,控件不含标题栏。

3.ScreenToClient() 用于将屏幕坐标系转换为自身的客户区坐标系。若父窗口调用该函数,那么传入的矩形就会转换为父窗口的客户区坐标系;若控件调用该函数,那么传入的矩形就会转换为控件的客户区坐标系。

4.ClientToScreen() 用于将自身的客户区坐标系转换为屏幕坐标系。

5.MoveWindow()用于改变指定窗口的位置和大小。对父窗口来说,原点位于屏幕的左上角;对子窗口来说,原点位于父窗口客户区的左上角。对于Owned窗口,原点位于屏幕左上角。

计算窗口边框 https://blog.csdn.net/passFuHao/article/details/48714747

获取控件在客户区的坐标

CRect rect;
GetDlgItem(ID_MYUSERNAMEEDIT)->GetWindowRect(rect);
ScreenToClient(rect);
CString str;
str.Format("%d - %d - %d - %d",rect.left,rect.top,rect.right,rect.bottom);
MessageBox(str);
 

Microsoft Foundation Classes (MFC) 是一组用于 Windows 编程的标准 C++ 类库,它使得创建图形用户界面(GUI)变得更加容易。在 MFC 中设置窗口大小主要有两种方式:通过属性编辑器直接设置,以及在代码中动态修改。 ### 通过属性编辑器设置窗口大小 在使用 MFC 的情况下,通常在 Visual Studio 或其他 IDE 中打开 MFC 项目的属性页面(右击项目 -> 属性)。在“资源”或“项目属性”中找到“主框架”或“视图”,并进入“窗口”选项卡。 在这里,您可以看到窗口的“最小尺寸”、“最大尺寸”以及“默认尺寸”。您可以直接修改这些值来设置窗口的大小限制。此外,“初始位置和大小”部分允许指定窗口首次加载时的尺寸和位置。 ### 在代码中设置窗口大小 在 MFC 应用中,您也可以通过编写代码动态改变窗口大小。这通常是通过修改 `CFrameWnd` 或其派生类(例如 `CDialog` 或 `CToolKit` 等)的对象的尺寸来完成的。以下是一个简单的示例: ```cpp // 假设 `MyView` 是您的视图类的一个实例 void MyView::OnSize(UINT nType, int cx, int cy) { CView::OnSize(nType, cx, cy); // 当窗口大小发生变化时,根据需要调整布局或内容 AdjustLayout(); } void MyView::AdjustLayout() { // 您可以根据窗口的新大小来调整 UI 元素的位置和大小 // 例如,移动某个按钮或者重新分配文本区域的尺寸 CRect rect; // 用于存放当前控件的矩形坐标 myButton.GetWindowRect(rect); // 假设 `myButton` 是您想要调整大小的按钮 // 根据新的窗口尺寸调整按钮的位置和大小 rect.right += 50; // 增加一些额外空间 rect.bottom -= 30; // 减小底部空间以便适应新的高度需求 myButton.MoveWindow(&rect); } ``` 在这个例子中,`OnSize` 方法会在窗口大小变化时自动调用,您可以在其中加入对窗口内部布局或元素的调整逻辑。而 `AdjustLayout` 方法则演示了如何根据新的窗口尺寸重新定位和调整一个假想的按钮。 ### 相关问题: 1. MFC 是否支持响应鼠标拖动调整窗口大小的功能? - MFC 支持通过添加特定的 WM_SIZE 和 WM_NCMOVE 消息处理器来响应鼠标拖动调整窗口大小。这涉及到监听和处理窗口边角或边缘的双击或拖动动作。 2. 如何在 MFC 中动态改变窗口标题栏的颜色? - 要动态改变窗口标题栏的颜色,通常需要自定义窗口类并覆盖 `Create` 方法,然后在创建过程中使用 `SetSysColor` 或类似函数来设置颜色。然而,MFC 默认不支持直接从代码中改变标题栏的颜色,因为这通常由底层操作系统的窗口管理器控制。 3. MFC 中的窗口大小限制是如何实现的? - MFC 提供了窗口的最大尺寸限制通过在其属性页中配置“最大尺寸”选项实现。当尝试将窗口大小设置超出这个限制时,系统会自动裁剪或放大缩放至限制范围内。这种方式主要是为了防止窗口过大导致用户界面不可见或难以控制的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值