如何获得vc控件的屏幕坐标

本文介绍了VC6中对话框资源文件保存的控件坐标单位(dialog unit)及其与像素单位(pixel unit)的区别,并提供了将dialog unit转换为pixel unit的具体代码示例。
Wan2.2-T2V-A5B

Wan2.2-T2V-A5B

文生视频
Wan2.2

Wan2.2是由通义万相开源高效文本到视频生成模型,是有​50亿参数的轻量级视频生成模型,专为快速内容创作优化。支持480P视频生成,具备优秀的时序连贯性和运动推理能力

 //本文来自http://wanyozxy.blog.hexun.com/1676441_d.html, 在此感谢原文作者(wanyozxy's Blog的主人)

 

 

VC6的资源文件中会保存dialog中控件的坐标,格式是x,y,cx,cy。其中x,y是控件左上角的坐标,cx是控件的width,cy是控件的height。如下例是一个进度条控件在rc文件中的定义:

    CONTROL  Progress1",IDC_PROGRESS1,"msctls_progress32",PBS_SMOOTH | WS_BORDER,137,68,80,14

但这个坐标并不是真正的pixel unit,而是dialog unit。我在实际编程时为了能在进度条中显示数字,所以就重载了进度条类,替换原来的进度条控件。在调用新的派生类的Create()方法时,必须给出控件在dialog中的相对坐标。我直接使用了资源文件中原来进度条控件的坐标,结果发现误差很大。通过查询MSDN才搞清楚,原来资源文件中的坐标并不是pixel unit, 而是dialog unit。要想实现从dialog unit到pixel unit的转换可以调用api MapDialogRect() ,MFC已经封装了这个函数。

下面的代码根据rc文件中定义的控件坐标,获得该控件在dialog client area中以像素为单位的坐标。注意这个坐标是dialog内的相对坐标,不是整个screen内的绝对坐标。

 RECT progressbar_rect;
 TCHAR szBuf[256];


 progressbar_rect.left = 137; // dialog unit
 progressbar_rect.top = 68;   // dialog unit
 progressbar_rect.right = progressbar_rect.left + 80;      // dialog unit
 progressbar_rect.bottom = progressbar_rect.top  + 14; // dialog unit

 MapDialogRect(&progressbar_rect);

 // display new pixel unit
 _stprintf(szBuf, "Progress Bar (%d,%d) - (%d,%d)",
               progressbar_rect.left, progressbar_rect.top,
               progressbar_rect.right, progressbar_rect.bottom);

 MessageBox(szBuf);

您可能感兴趣的与本文相关的镜像

Wan2.2-T2V-A5B

Wan2.2-T2V-A5B

文生视频
Wan2.2

Wan2.2是由通义万相开源高效文本到视频生成模型,是有​50亿参数的轻量级视频生成模型,专为快速内容创作优化。支持480P视频生成,具备优秀的时序连贯性和运动推理能力

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值