获取客户区域 - GetClientRect
函数简介
获取指定窗口的客户区域坐标。客户区是指窗口的工作区域,不包括标题栏、菜单栏、工具栏、状态栏和边框等非客户区。返回的坐标是相对于客户区左上角的相对坐标,左上角坐标总是(0,0)。
接口名称
GetClientRect
DLL调用
int GetClientRect(long ola, long hwnd, int* x1, int* y1, int* x2, int* y2)
参数定义:
ola
(长整型数): OLAPlug对象的指针,由 CreateCOLAPlugInterFace 接口生成。hwnd
(长整型数): 目标窗口的句柄。x1
(整型数指针): 返回客户区左上角的X坐标,总是0。y1
(整型数指针): 返回客户区左上角的Y坐标,总是0。x2
(整型数指针): 返回客户区右下角的X坐标,即客户区宽度。y2
(整型数指针): 返回客户区右下角的Y坐标,即客户区高度。
示例:
// 获取窗口客户区大小
int x1, y1, x2, y2;
int ret = GetClientRect(ola, hwnd, &x1, &y1, &x2, &y2);
if (ret == 1) {
printf("客户区大小:宽度=%d, 高度=%d\n", x2 - x1, y2 - y1);
} else {
printf("获取客户区域失败\n");
}
// 计算非客户区大小(边框、标题栏等)
int wx1, wy1, wx2, wy2;
GetWindowRect(ola, hwnd, &wx1, &wy1, &wx2, &wy2);
int border_width = (wx2 - wx1) - (x2 - x1);
int border_height = (wy2 - wy1) - (y2 - y1);
printf("非客户区大小:宽度=%d, 高度=%d\n", border_width, border_height);
// 设置客户区大小为800x600
int new_width = 800;
int new_height = 600;
SetClientSize(ola, hwnd, new_width, new_height);
COM调用
int GetClientRect(long hwnd, int* x1, int* y1, int* x2, int* y2)
参数定义:
hwnd
(长整型数): 目标窗口的句柄。x1
(整型数指针): 返回客户区左上角的X坐标,总是0。y1
(整型数指针): 返回客户区左上角的Y坐标,总是0。x2
(整型数指针): 返回客户区右下角的X坐标,即客户区宽度。y2
(整型数指针): 返回客户区右下角的Y坐标,即客户区高度。
示例:
# 获取窗口客户区大小
x1, y1, x2, y2 = 0, 0, 0, 0
ret = ola.GetClientRect(hwnd, x1, y1, x2, y2)
if ret == 1:
messagebox(f"客户区大小:宽度={x2 - x1}, 高度={y2 - y1}")
else:
messagebox("获取客户区域失败")
# 计算非客户区大小(边框、标题栏等)
wx1, wy1, wx2, wy2 = 0, 0, 0, 0
ola.GetWindowRect(hwnd, wx1, wy1, wx2, wy2)
border_width = (wx2 - wx1) - (x2 - x1)
border_height = (wy2 - wy1) - (y2 - y1)
messagebox(f"非客户区大小:宽度={border_width}, 高度={border_height}")
# 设置客户区大小为800x600
new_width = 800
new_height = 600
ola.SetClientSize(hwnd, new_width, new_height)
返回值
整型数:
- 0: 获取失败
- 1: 获取成功
注意事项
- 窗口必须处于可见状态,否则获取可能失败
- 返回的坐标是相对于客户区左上角的相对坐标,(x1,y1)总是(0,0)
- (x2,y2)表示客户区的宽度和高度,而不是屏幕坐标
- 如果需要获取包含非客户区的窗口区域,请使用 GetWindowRect 函数
- 如果需要将客户区坐标转换为屏幕坐标,请使用 ClientToScreen 函数