VC如何获取对话框中控件的坐标

本文介绍在Visual C++中如何使用API函数GetWindowRect和ScreenToClient等来获取对话框内控件的坐标,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

VC如何获取对话框中控件的坐标

GetWindowRect是取得窗口在屏幕坐标系下的RECT坐标(包括客户区和非客户区),这样可以得到窗口的大小和相对屏幕左上角(0,0)的位置。

    GetClientRect取得窗口客户区(不包括非客户区)在客户区坐标系下的RECT坐标,可以得到窗口的大小,而不能得到相对屏幕的位置,它的top和left都为0,right和botton是宽和高,因为这个矩阵是在客户区坐标系下(相对于窗口客户区的左上角)的。  

    ClientToScreen把客户区坐标系下的RECT坐标转换为屏幕坐标系下的RECT坐标.

    ScreenToClient把屏幕坐标系下的RECT坐标转换为客户区坐标系下的RECT坐标.     我们对同一个窗口先GetWindowRect取得一个RECT,再用ScreenToClient转换到客户坐标系。然后GetClientRect取得一个RECT,再用ClientToScreen转换到屏幕坐标系。显然,GetWindowRect取得的矩阵不小于GetClientRect取得的矩阵。因为前者包含了非客户区,而后包括了客户区。

引自:http://blog.chinaunix.net/u/25372/showart_304363.html

所以要获得一个控件再对话框中的坐标的实现代码是:

CRect lpRec; 
GetDlgItem(IDC_SLIDER_output)->GetWindowRect(&lpRec); 
ScreenToClient(&lpRec);

详细可看http://blog.pfan.cn/miaowei/39345.html


本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/seven407/archive/2010/02/26/5330034.aspx


void CControlDlg::OnMatch()
{
 // TODO: Add your control notification handler code here
 CRect rectL,rectR;
 GetDlgItem(IDC_BUTTON1)->GetWindowRect(&rectL);//获取控件相对于屏幕的位置
 ScreenToClient(rectL);//转化为对话框上的相对位置
 GetDlgItem(IDC_BUTTON2)->GetWindowRect(&rectR);//获取控件相对于屏幕的位置
 ScreenToClient(rectR);//转化为对话框上的相对位置

 int heigth;

 int width;
 height=rectL.bottom-rectL.top;//height为button的高
 width=rectL.right-rectL.left;//width为button的宽

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值