Win32中如何通过已有x、y坐标创建可用于PtInRect的POINT对象?
Win32 下基于x、y坐标构造POINT实例的方法
POINT是Windef.h中定义的Plain Old Data结构体,核心成员仅包含两个LONG类型的坐标值x、y,不存在专门的构造函数,直接通过结构体赋值即可完成实例创建,常用实现方式如下:
- 分步赋值写法(兼容性最强,无语言版本语法依赖)
POINT pt; pt.x = your_x_value; pt.y = your_y_value;
- 一行聚合初始化写法
// 兼容所有Win32开发环境的通用写法 POINT pt = { your_x_value, your_y_value }; // C99/C++ 指定初始化器写法,避免结构体成员顺序变动引发的赋值错误 POINT pt = { .x = your_x_value, .y = your_y_value };
关键注意点
- 类型匹配要求:
POINT的x、y成员是32位有符号整数LONG类型,如果获取到的x、y是其他类型(如int、float、DWORD),需要做显式类型转换,避免出现数值截断、符号位错误:
// 示例:将int类型的原始坐标转换为POINT兼容格式 int raw_x = 120, raw_y = 85; POINT pt = { (LONG)raw_x, (LONG)raw_y };
- 常见使用误区:
MAKEPOINT宏仅用于将Win32消息中打包为单个LPARAM值的坐标拆解为POINT结构,不能直接传入两个独立的x、y值用来构造实例,避免参数错配。
调用
PtInRect时,直接传入构造完成的POINT实例即可,该函数的第二个参数要求为POINT传值,无需取地址。
内容的提问来源于stack exchange,提问作者professionalgrammer
相关产品推荐
相关产品推荐

