MapDialogRect函数,转换对话框坐标为像素坐标

本文介绍了Windows API中用于对话框单位与屏幕单位之间转换的MapDialogRect函数,以及获取和转换窗口坐标的GetWindowRect、GetClientRect、ClientToScreen和ScreenToClient函数。详细解释了这些函数的应用场景及参数含义。
摘要由CSDN通过智能技术生成


    函数功能:该函数把指定的对话框单位映射成屏幕单位(像素)。函数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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值