窗口坐标问题

Windows窗口分为系统区和客户区

系统区
标题栏
...
GetWindowsRect()得到的是距离系统区(整个桌面)的长度

客户区
...
GetClientRect()得到的是距离客户区的长度

 

相关结构、类解析:

typedef struct tagPOINT {
    LONG x;
    LONG y;
} POINT;

x: 横坐标
y: 纵坐标


typedef struct _RECT {
    LONG left;
    LONG top;
    LONG right;
    LONG bottom;
} RECT;

left:  为窗口左边 距离父窗口 左边的长度
top:   为窗口顶端 距离父窗口 顶端的长度
right: 为窗口右边 距离父窗口 左边的长度
bottom:为窗口底部 距离父窗口 顶端的长度

left和top一对,
right和bottom一对, 改变其中的一对都会改变矩形长、宽.
有待验证!!!!

1.当用GetClientRect()获得的是客户区的RECT
left:0
top:0  
左上角的这两个坐标总为0;
right:
bottom:
右下角的这两个坐标,right为宽,bottom为高;

2.当用GetWindowRect()获得的是系统区的RECT
left:
top:
代表的是左上角在父窗口中的坐标;
right:
bottom:
代表的是右下角在父窗口中的坐标;
 
    当为控件的时候,
这两个函数获得宽度和高度都是控件的宽度、高度.
    当为窗体的时候,
GetWindowRect()获得的是窗体的宽度、高度;
GetClientRect()获得的仅仅是窗体客户区的宽度、高度.


// 获得标题栏的高度
::GetSystemMetrics(SM_CYCAPTION)

ClientToScreen()是把窗口用户区坐标转换为屏幕坐标
ScreenToClient()是把屏幕坐标转换为窗口用户区坐标
屏幕坐标是相对于屏幕左上角的;
而窗口用户区坐标是相对于窗口用户区左上角的.

### 关于窗口坐标的定义与使用方法 在图形用户界面(GUI)编程中,窗口坐标通常用于指定窗口或控件的位置以及大小。以下是关于窗口坐标的具体定义和使用方法: #### 窗口坐标的定义 窗口坐标是指定窗口位置的关键参数之一。它通过一对数值 `(x, y)` 来描述窗口左上角相对于屏幕或其他父容器的偏移量。`x` 表示水平方向的距离,而 `y` 则表示垂直方向的距离。 对于 MATLAB 的 GUI 编程而言,可以通过设置 `Position` 属性来调整窗口的位置和尺寸[^1]。该属性是一个四元向量 `[left, bottom, width, height]`,其中: - `left` 和 `bottom` 是窗口左下角相对于其父容器的坐标; - `width` 和 `height` 分别代表窗口的宽度和高度。 而在其他框架(如 PyQt 或 Tkinter 中),可以分别使用类似的方法设定窗口的位置。例如,在 PyQt 中可利用 `QWidget.move(x, y)` 方法移动窗口到指定坐标[^4]。 #### 使用方法 下面展示如何在不同环境中应用这些概念。 ##### MATLAB 示例 MATLAB 提供了一种简单的方式来操作窗口及其子对象的位置和单位。以下代码展示了如何获取当前窗口单位并将其更改为英寸作为例子说明: ```matlab f = figure; u = f.Units; % 获取现有单位 disp(u); f.Units = 'inches'; % 更改单位为 inches pos = [0.5, 0.5, 3, 2]; % 设置新位置及大小 (x,y,width,height) set(f,'Position', pos); % 应用新的 Position 值 ``` ##### Python PyQt 示例 如果采用的是基于 Qt 的工具包,则可通过如下方式实现相同目标——即定位主窗口至特定像素点处: ```python from PyQt5.QtWidgets import QApplication, QWidget app = QApplication([]) window = QWidget() window.setWindowTitle('Window Coordinates Example') # Move window to position (100px from the left edge and 200px down from top). window.move(100, 200) window.resize(640, 480) # Set size of window. window.show() app.exec_() ``` 以上两部分分别介绍了两种常见开发环境下的实践案例,帮助理解窗口坐标的实际运用场景和技术细节。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值