MFC坐标转换
2010-09-01 23:39
134 查看
MapDialogRect,转换对话框坐标为像素坐标
功能:该函数把指定的对话框单位映射成屏幕单位(像素)。函数MapDialogRect用变换坐标替换指定的RECT结构中的坐标,这就使得该结构可以用来创建对话框或定位对话框内的控制。
函数原型:BOOL MapDialogRect(HWND hDlg,LPRECT IpRect);
参数:
hDlg:标识对话框。MapDialogRect 函数只接收对话框创建函数中一个创建的对话框的句柄,对于其他窗口的句柄失效。
IpRect:指向一个含有将被转变的对话框坐标的RECT结构。
返回值:如果消息被处理,则返回值为非零值。如果消息没有被处理则返回值为零。若想获得更多的错误信息,请调用GetLastError函数。
备注:MapDialogRect函数假定RECT结构内的起始坐标代表对话框单位。为把这些坐标从对话框单位转变为像素,函数检索对话框的当前水平和垂直基本单位,然后应用下列公式:
left=(left*baseunitX)/4;right=(right*baseunitX)/4
top=(top* baseunitY)/ 8; bottom=(bottom* baseunitY)/ 8
在很多情况下,对话框的基本单位同用GetDialogBaseUnits函数检索到的单位一样。如果对话板模板有DS_SETFONT类型,那么基本单位为模扳给定的字体中的字符的平均宽度和高度,单位为像素。
速查:Windows NT:3.1及以上版本:Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:Winuser.h;库文件:USer32.lib。
GetWindowRect是取得窗口在屏幕坐标系下的RECT坐标(包括客户区和非客户区),这样可以得到窗口的大小和相对屏幕左上角(0,0)的位置。
GetClientRect取得窗口客户区(不包括非客户区)在客户区坐标系下的RECT坐标,可以得到窗口的大小,而不能得到相对屏幕的位置,因为这个矩阵是在客户区坐标系下(相对于窗口客户区的左上角)的。
ClientToScreen把客户区坐标系下的RECT坐标转换为屏幕坐标系下的RECT坐标.
ScreenToClient把屏幕坐标系下的RECT坐标转换为客户区坐标系下的RECT坐标.
我们对同一个窗口先GetWindowRect取得一个RECT,再用ScreenToClient转换到客户坐标系。然后 GetClientRect取得一个RECT,再用ClientToScreen转换到屏幕坐标系。显然,GetWindowRect取得的矩阵不小于 GetClientRect取得的矩阵。因为前者包含了非客户区,而后包括了客户区。
对GetWindowRect取得的矩阵ScreenToClient后,矩阵的大小没有变小,(-3,-29)是窗口的左上角的坐标,相对窗口客户区左上角。
对GetClientRect取得的矩阵ClientToScreen后,矩阵也没有变大,新得到的矩阵是窗口客户区在屏幕坐标系上的RECT。
功能:该函数把指定的对话框单位映射成屏幕单位(像素)。函数MapDialogRect用变换坐标替换指定的RECT结构中的坐标,这就使得该结构可以用来创建对话框或定位对话框内的控制。
函数原型:BOOL MapDialogRect(HWND hDlg,LPRECT IpRect);
参数:
hDlg:标识对话框。MapDialogRect 函数只接收对话框创建函数中一个创建的对话框的句柄,对于其他窗口的句柄失效。
IpRect:指向一个含有将被转变的对话框坐标的RECT结构。
返回值:如果消息被处理,则返回值为非零值。如果消息没有被处理则返回值为零。若想获得更多的错误信息,请调用GetLastError函数。
备注:MapDialogRect函数假定RECT结构内的起始坐标代表对话框单位。为把这些坐标从对话框单位转变为像素,函数检索对话框的当前水平和垂直基本单位,然后应用下列公式:
left=(left*baseunitX)/4;right=(right*baseunitX)/4
top=(top* baseunitY)/ 8; bottom=(bottom* baseunitY)/ 8
在很多情况下,对话框的基本单位同用GetDialogBaseUnits函数检索到的单位一样。如果对话板模板有DS_SETFONT类型,那么基本单位为模扳给定的字体中的字符的平均宽度和高度,单位为像素。
速查:Windows NT:3.1及以上版本:Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:Winuser.h;库文件:USer32.lib。
GetWindowRect是取得窗口在屏幕坐标系下的RECT坐标(包括客户区和非客户区),这样可以得到窗口的大小和相对屏幕左上角(0,0)的位置。
GetClientRect取得窗口客户区(不包括非客户区)在客户区坐标系下的RECT坐标,可以得到窗口的大小,而不能得到相对屏幕的位置,因为这个矩阵是在客户区坐标系下(相对于窗口客户区的左上角)的。
ClientToScreen把客户区坐标系下的RECT坐标转换为屏幕坐标系下的RECT坐标.
ScreenToClient把屏幕坐标系下的RECT坐标转换为客户区坐标系下的RECT坐标.
我们对同一个窗口先GetWindowRect取得一个RECT,再用ScreenToClient转换到客户坐标系。然后 GetClientRect取得一个RECT,再用ClientToScreen转换到屏幕坐标系。显然,GetWindowRect取得的矩阵不小于 GetClientRect取得的矩阵。因为前者包含了非客户区,而后包括了客户区。
对GetWindowRect取得的矩阵ScreenToClient后,矩阵的大小没有变小,(-3,-29)是窗口的左上角的坐标,相对窗口客户区左上角。
对GetClientRect取得的矩阵ClientToScreen后,矩阵也没有变大,新得到的矩阵是窗口客户区在屏幕坐标系上的RECT。
相关文章推荐
- mfc 绘图中的坐标空间转换问题
- MFC的坐标转换GetClientRect/GetWindowRect/ClientToScreen/GetCursorPos/ScreenToClient
- mfc 绘图中的坐标空间转换问题
- MFC界面 坐标获取/转换 及 区域获取
- mfc 绘图中的坐标空间转换问题
- MFC CScrollView中的设备坐标和逻辑坐标转换
- MFC中picture控件坐标转换
- MFC坐标转换
- MFC中picture控件坐标转换
- MFC中画线,坐标转换等问题小结
- MFC界面 坐标获取/转换 及 区域获取
- MFC坐标转换
- MFC各种坐标转换
- MFC界面 坐标获取/转换 及 区域获取
- MFC的坐标转换GetClientRect/GetWindowRect/ClientToScreen/GetCursorPos/ScreenToClient
- 一个地图坐标转换成屏幕坐标
- 基于mfc数字图像处理的小软件pdd-转换图片成RGB通道,反色,黑白,灰度图片
- 六边形格子地图坐标计算与转换
- 屏幕坐标向OpenGL坐标的转换(完整版)(转载)
- 百度地图坐标转换(gps google 百度坐标相互转换)