GetWindowRect,GetClientRect,ScreenToClient,ClientToScreen
花了2早上的时间搞定了,,对于GetWindowRect,GetClientRect,ScreenToClient,ClientToScreen这4个函数的对比做了很详细的解释,自己还做了测试放上面,绝对能很好的理解。 在Windows编程中,经常需要处理窗口和控件的坐标转换,`GetWindowRect`, `GetClientRect`, `ScreenToClient`, `ClientToScreen`这四个函数是处理这些转换的关键。它们的作用如下: 1. **GetWindowRect**: 此函数用于获取一个窗口的完整矩形,包括标题栏、边框和滚动条等非客户区。返回的矩形是以屏幕坐标为基准的,即左上角坐标为(0,0)的屏幕位置。 2. **GetClientRect**: 该函数返回窗口的客户区矩形,即排除了边框、标题栏、菜单和滚动条等部分的矩形。这个矩形也是以窗口自身的坐标系为基准的。 3. **ScreenToClient**: 当你需要将屏幕坐标转换为窗口客户区坐标时,可以使用这个函数。它会把一个在屏幕坐标系统中的点或矩形转换为对应窗口客户区内的坐标。 4. **ClientToScreen**: 相反地,如果你有一个窗口客户区内的坐标或矩形,想要转换为屏幕坐标,就使用这个函数。它将客户区坐标转换为屏幕坐标。 在描述中提到的`OnInitDialog`,这是MFC或WinAPI中对话框类的一个成员函数,用于初始化对话框。在这个阶段,对话框尚未显示,因此获取的窗口大小是基于(0,0)点的,不考虑窗口的位置。如果在其他情况下获取窗口尺寸,窗口可能已被移动到屏幕中央,这时的坐标会有所不同。 `GetDlgItem(IDC_IMAGE)->GetWindowRect(&rect)`和`GetDlgItem(IDC_IMAGE)->GetClientRect(&rect)`的区别在于,前者获取的是包含边框在内的控件矩形,后者仅获取控件的客户区矩形,不包括边框。当使用`ScreenToClient`进行转换时,如果控件有边框,由于边框不属于客户区,所以在转换过程中会出现负坐标,这是因为边框占据了屏幕坐标的一部分。 `ClientToScreen`和`ScreenToClient`这两个函数在处理控件和窗口坐标时起到了桥梁作用,它们使得在不同坐标系统之间进行转换变得简单。需要注意的是,这些函数的正确使用对于确保控件的正确绘制和交互至关重要。 在代码示例中,可以看到各种组合使用这些函数的情况,比如先获取窗口或控件的矩形,然后进行坐标转换。这样的操作在设计自定义界面或者进行精确的用户输入处理时非常常见。 总结来说,理解和熟练掌握`GetWindowRect`, `GetClientRect`, `ScreenToClient`, `ClientToScreen`这四个函数对于Windows程序开发是至关重要的,它们能够帮助开发者准确地处理窗口和控件的位置和尺寸,从而实现预期的界面效果和用户交互。
- zzzzllllzzzz2013-12-04说的挺全面的
- binghe8112152015-05-10很不错的说,真好用
- 粉丝: 1
- 资源: 7
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助