将twip(缇)换算成像素的方法(高手可能知道了,给新手看看)
我前一段写一个小程序需要窗口跟随鼠标进行移动.
首先使用计数器得到鼠标的位置(api函数:getcurosrpos).然后将x,y赋值给form.top和form.left.
写出来后发现,窗口并不能在鼠标所处的方位,虽然也能跟随鼠标进行移动.查了一下资料,发现窗口的位置是有twip来算得,如果想得到实际效果的话,就必须将twip换算成pixel,具体做法如下:
一缇为1440英寸,我使用api函数:GetDeviceCaps来得到每英寸内所包含的像素
scrx=getdevicecaps(dc,LOGPIXELSX)'dc为桌面窗口的dc,LOGPIXELSX为横向scry=getdevicecaps(dc,LOGPIXELSy)'同上
然后我们进行换算
Form.Top = Int(p.Y * (1440 / scrx) - Form.Width / 2)
Form.Left = Int(p.X * (1440 / scry) - Form.Height / 2)'p.x和p.y为鼠标方位
运行程序后就可以看到,窗口始终跟随鼠标并且中心在鼠标点上
问题点数:0、回复次数:5Top
1 楼aliaoz()回复于 2003-02-01 06:40:23 得分 0
发现错误,是一twip是1/1440英寸Top
2 楼Kivic(享受·生活)回复于 2003-02-01 09:19:35 得分 0
不一定,还有用户设置项对鼠标的换算Top
3 楼James0001(虾米—什么时候成大虾?)回复于 2003-02-01 11:28:10 得分 0
其实用窗体的 ScaleX 和 ScaleY 方法很方便的。Top
4 楼gang75(*^&^*)回复于 2003-02-04 11:38:21 得分 0
gzTop
5 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2003-02-04 11:41:33 得分 0
ScaleX、ScaleY 方法
用以将 Form,PictureBox 或 Printer 的宽度或高度值从一种 ScaleMode 属性的度量单位转换到另一种。不支持命名参数。
语法
object.ScaleX (width, fromscale, toscale)
object.ScaleY (height, fromscale, toscale)
ScaleX 和 ScaleY 方法的语法包含如下部分:
部分 描述
object 可选的。一个对象表达式,其值为“应用于”列表中的一个对象。如果省略 object,则带有焦点的 Form 对象缺省为 object。
width 必需的。为 object 指定被转换的度量单位的数量。
height 必需的。为 object 指定被转换的度量单位的数量。
fromscale 可选的。一个常数或数值,按照下列设置中的描述,指定 object 的 width 或 height 从哪一种坐标系统转换。fromscale 可取的数值与 ScaleMode 属性的数值加上 HiMetric 的新数值相同。
toscale 可选的。一个常数或数值,按照下列“设置值”中的描述,指定 object 的 width 或 height 转换到哪一种坐标系统。toscale 可取的数值与 ScaleMode 属性的数值加上 HiMetric 的新数值相同。
设置值
用于 fromscale 和 toscale 设置值有:
常数 值 描述
vbUser 0 用户定义:指示 object 的宽度和高度设置为自定义值。
vbTwips 1 缇(每逻辑英寸 1440 缇;每逻辑厘米 567 缇)。
vbPoints 2 磅(每逻辑英寸 72 点)。
vbPixels 3 像素 (显示器或打印机分辨率的最小单位)。
vbCharacters 4 字符(水平 = 每单位 120 缇,垂直 = 每单位 240 缇)。
vbInches 5 英寸
vbMillimeters 6 毫米
vbCentimeters 7 厘米
vbHimetric 8 HiMetric。如果省略 fromscale,则 HiMetric 为缺省值。
vbContainerPosition 9 决定控件位置。
vbContainerSize 10 决定控件大小。
说明
ScaleX 和 ScaleY 方法按 fromscale 指定的度量单位取值(width 或 height),并将它转换为 toscale 指定的度量单位下相应的值。
也可以结合 PaintPicture 方法使用 ScaleX 和 ScaleY。
Top




