| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1867 人关注过本帖
标题:如何求窗体的物理尺寸?
只看楼主 加入收藏
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1925
专家分:2992
注 册:2009-12-22
结帖率:89.13%
收藏
 问题点数:0 回复次数:11 
如何求窗体的物理尺寸?
如何求窗体的物理尺寸,长多少mm,宽多少mm?
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 物理 窗体 多少 
2022-09-01 19:00
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4938
专家分:30047
注 册:2008-10-15
收藏
得分:0 
无精度超级高的办法

一般来说,系统 还是 比较准确的,按缇计算吧, 1厘米=567缇

缇是屏幕的一种量度单位,等于 1/20 磅。缇是独立于屏幕的单位,可确保在所有显示系统中,屏幕应用程序中的屏幕元素的位置和比例都相同。逻辑上一英寸约为 1440 缇,一厘米为 567 缇 ( 在显示时,屏幕项目的长度是用英寸或厘米测量的 )。


授人于鱼,不如授人于渔
早已停用QQ了
2022-09-01 20:53
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1925
专家分:2992
注 册:2009-12-22
收藏
得分:0 
好像都不对

程序代码:
Private Sub Form_Load()
Debug.Print Form1.Width / Screen.TwipsPerPixelX / 567
Debug.Print Form1.Height / Screen.TwipsPerPixelY / 567
Debug.Print Form1.Width * Screen.TwipsPerPixelX / 567
Debug.Print Form1.Height * Screen.TwipsPerPixelY / 567
Debug.Print Form1.Width / 567
Debug.Print Form1.Height / 567
End Sub

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-09-01 21:13
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4938
专家分:30047
注 册:2008-10-15
收藏
得分:0 
我试了一下,我这个显示器上的最后二个是正确的,
误差。。。。。。
计算出来的是 8.46,量出来的约 8.6

产生误差的原因
一般来说,24的显示器是 1920 的分辨率,但现在23.5 的也做成这个分辨率,导致 像素变小了。产生了这个误差。

而这个 TwipsPerPixelX  属性,是 缇转像素 用的。
windows 标准分辨率,不缩放的情况,这个属性值是 15 。

授人于鱼,不如授人于渔
早已停用QQ了
2022-09-02 12:01
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1925
专家分:2992
注 册:2009-12-22
收藏
得分:0 
拿尺子直接在屏幕上量大约是5X7的。差的有点多。
放在WORD中看了一下尺寸数值差不多。
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2022-9-2 13:17编辑过]


心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-09-02 13:15
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10537
专家分:42927
注 册:2014-5-20
收藏
得分:0 
试试API GetDeviceCaps 有无效,用电视显示好象无效。
GetDeviceCaps(hdc,LOGPIXELSX);//每英寸水平逻辑像素数
GetDeviceCaps(hdc,LOGPIXELSY);//每英寸垂直逻辑像素数
GetDeviceCaps(hdc,HORZRES);//水平像素总数
GetDeviceCaps(hdc,VERTRES);//垂直像素总数
GetDeviceCaps(hdc,HORZSIZE);//物理屏幕的宽度,以毫米为单位
GetDeviceCaps(hdc,VERTSIZE);//物理屏幕的高度,以毫米为单位

三者的关系通常满足:
HORZSIZE = 25.4 * HORZRES/LOGPIXELSX
VERTSIZE = 25.4 * VERTRES/LOGPIXELSY
2022-09-02 17:06
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4938
专家分:30047
注 册:2008-10-15
收藏
得分:0 
这种按 缇,像素,在 系统 和 WORD 里,都是按标准像素大小的尺寸 进行换算,
如 19寸宽,1440*900
   22寸宽,1600*1050
   24寸宽,1920*1080

但现在很多显示器
    20寸宽,1600*900
    21.5寸的,也做 1600*1050
    23.5 就做到 1920*1080
    27寸的,有做 1920*1080 ,也有做2K 的,
像素大小都不一样,但系统还是按每个像素 15缇去计算,自然不准了。

现在搞不懂哪个是标准像素大小了。

WORD里也是按像素大小进行换算,自然与VB里换算出来的是一样的。

像素点越高,量出来的数值就越偏小,反之就越偏大

对于印刷来说,每种机子有一个DPI,这个直接告诉系统的,系统按这个DPI去计算每个点的大小,然后就印出来比较准了。
显示器却不告诉系统 DPI ,系统只能按默认值 去用。显示器默认是 DPI 是 96 。但每种显示器的DPI不相同。
记错了,针式打印机是 72



[此贴子已经被作者于2022-9-2 18:59编辑过]


授人于鱼,不如授人于渔
早已停用QQ了
2022-09-02 17:27
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1925
专家分:2992
注 册:2009-12-22
收藏
得分:0 
回复 6楼 吹水佬
不管是
hdc
me.hdc
form1.hdc
都是整个屏幕的hdc,无法得到窗体form1的hdc,获取不到窗体form1的物理尺寸。

图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2022-9-2 18:16编辑过]


心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-09-02 17:44
William1949
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:111
专家分:0
注 册:2009-3-17
收藏
得分:0 
Me.ScaleX(Me.Width, vbTwips, vbMillimeters)
Me.ScaleY(Me.Height, vbTwips, vbMillimeters)

这样不行吗?还是我把问题想简单了?
2022-09-03 19:11
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1925
专家分:2992
注 册:2009-12-22
收藏
得分:0 
结果有点区别。
这下好了,不知哪个更准一些了?

图片附件: 游客没有浏览图片的权限,请 登录注册

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-09-03 19:17
快速回复:如何求窗体的物理尺寸?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016884 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved