标签:
pixel(像素)
可在屏幕或打印机上显示的最小元素。像素与屏幕无关。
各种显示类型的设计
Microsoft Windows 是与设备无关的-基于窗口的应用程序可以在许多不同显示分辨率与颜色浓度的计算机中运行。同样,用 Visual Basic 编写的应用程序也会在不同类型的显示器上运行,在设计应用程序时需要考虑到这一点。
设计与分辨率无关的窗体
缺省情况下,当改变屏幕分辨率时,Microsoft Visual Basic 不会改变窗体与控件的尺寸。这就意味着在分辨率
为 1024 X 768 的屏幕上设计的窗体,在分辨率为 640 X 480 的屏幕中运行时会伸出屏幕的边界之外。如果想创建不管使用什么样的屏幕
分辨率都能有相同比例的窗体和控件,必须在最低的分辨率下设计窗体,或者将改变窗体的代码添加到程序中去。
避免尺寸问题的最简单的方法是在 640 X 480 的分辨率下设计窗体。如果更喜欢在高一些的分辨率下工作,仍需要考虑窗体在低一些的分辨率下将如何
显示。实现这一点的方法是用“Form Layout”窗口预览窗体的大小和位置。您也可以使用“Resolution Guides”观察在低分辨率时
屏幕的哪些部分是可见的。要切换到“Resolution Guides”,可以在“Form Layout”窗口单击鼠标右键,从弹出菜单上选择
“Resolution Guides”菜单项。
在运行时,Visual Basic 根据设计时的位置来放置窗体。如果设计时在 1024 X 768 的分辨率上运行,并把窗体放到屏幕的右下角,则 当它在比较低的分辨率下运行时该窗体可能看不见。为了避免这种情况的发生,在设计时可从“Form Layout”窗口的弹出菜单选择 “Startup Position”菜单项来设置窗体的启动位置。同样,您也可以在运行时用下面的 Form Load 事件中的代码来设置窗体的位 置:
Private Sub Form_Load()
Me.Move 0, 0
End Sub
若是设置窗体的 Left 与 Top 的属性都为 0 也能有同样的效果,但 Move 方法只要一步就能完成。
Visual Basic 使用与设备无关的度量单位,缇,是用来计算尺寸与位置。Screen 对象的两个属
性 TwipsPerPixelX 与 TwipsPerPixelY 可以用来确定运行时的显示尺寸。应用这些属性,可以编写代码来调整窗体以及控件的
尺寸与位置。
Private Sub SetControls()
Dim X As Integer
Dim Y As Integer
X = Screen.TwipsPerPixelX
Y = Screen.TwipsPerPixelY
Select Case X, Y
Case 15, 15
‘ 重新改变控件尺寸及移动控件。
txtName.Height = 200
txtName.Width = 500
txtName.Move 200, 200
‘ 增加为其它分辨率编写的代码。
…
End Sub
也需要知道在设计时 Visual Basic 自身窗口的位置。如果在高分辨率下把“工程”窗口放置到屏幕的右边,那么会发现在低分辨率下打开工程时,它不再是可访问的了。
设计不同浓度的颜色
在设计应用程序时,也需要考虑运行应用程序计算机可能的颜色显示能力。有些计算机可以显示 256 色或更多的颜色,而另一些只能显示 16 种颜色。如
果使用 256 色的调色板来设计窗体,那么在 16 色上显示时,抖动(模仿无效颜色的一种方法)会使窗体上的一些元素消失。
为了避免这种情况,最好把应用程序使用的颜色局限于 Windows 标准的 16 颜色。这些颜色由 Visual Basic 的颜色常数来表示
(如 vbBlack、vbBlue 和 vbCyan 等等)。如果在应用程序中需要用 16 种以上的颜色,那么对于文本、按钮以及其他界面元素仍然
应当坚持用标准颜色。
缇与像素相互转换的通用函数
这里顺便说一下 ACCESS 中的其他几个单位的转换关系
磅:指打印的字符的高度的度量单位。1 磅等于 1/72 英寸,或大约等于 1 厘米的 1/28。
英寸:2.54 厘米
一般情况下:1厘米=8505像素
Option
Compare Database
Option
Explicit
Private
Declare
Function
apiGetDC
Lib
"user32"
Alias
"GetDC"
_
(
ByVal
hwnd
As
Long
)
As
Long
Private
Declare
Function
apiReleaseDC
Lib
"user32"
Alias
"ReleaseDC"
_
(
ByVal
hwnd
As
Long
,
ByVal
hdc
As
Long
)
As
Long
Private
Declare
Function
apiGetDeviceCaps
Lib
"gdi32"
Alias
"GetDeviceCaps"
_
(
ByVal
hdc
As
Long
,
ByVal
nIndex
As
Long
)
As
Long
Private
Const
LOGPIXELSX = 88
Private
Const
LOGPIXELSY = 90
Public
Const
DIRECTION_VERTICAL = 1
Public
Const
DIRECTION_HORIZONTAL = 0
‘===============================================================================
‘-函数名称: gFunTwipsToPixels
‘-功能描述: 转换堤到像素
‘-输入参数说明: 参数1:rlngTwips Long 需要转换的堤
‘ 参数2:rlngDirection Long DIRECTION_VERTICAL是Y方向 DIRECTION_HORIZONTAL为X方向
‘-返回参数说明: 转换后像素值
‘-使用语法示例: gFunTwipsToPixels 50,DIRECTION_VERTICAL
‘-参考:
‘-使用注意:
‘-兼容性: 97,2000,XP compatible
‘-作者: 王宇虹(参考微软KB),改进:王宇虹
‘-更新日期: 2002-08-26 ,2002-11-15
‘===============================================================================
Function
gFunTwipsToPixels(rlngTwips
As
Long
, rlngDirection
As
Long
)
As
Long
On
Error
GoTo
Err_gFunTwipsToPixels
Dim
lngDeviceHandle
As
Long
Dim
lngPixelsPerInch
As
Long
lngDeviceHandle = apiGetDC(0)
If
rlngDirection = DIRECTION_HORIZONTAL
Then
‘水平X方向
lngPixelsPerInch = apiGetDeviceCaps(lngDeviceHandle, LOGPIXELSX)
Else
‘垂直Y方向
lngPixelsPerInch = apiGetDeviceCaps(lngDeviceHandle, LOGPIXELSY)
End
If
lngDeviceHandle = apiReleaseDC(0, lngDeviceHandle)
gFunTwipsToPixels = rlngTwips / 1440 * rlngPixelsPerInch
Exit_gFunTwipsToPixels:
On
Error
Resume
Next
Exit
Function
Err_gFunTwipsToPixels:
MsgBox Err.Description, vbOKOnly + vbCritical,
"Error: "
& Err.Number
Resume
Exit_gFunTwipsToPixels
End
Function
‘===============================================================================
‘-函数名称: gFunPixelsToTwips
‘-功能描述: 转换像素到堤
‘-输入参数说明: 参数1:rlngPixels Long 需要转换的像素
‘ 参数2:rlngDirection Long DIRECTION_VERTICAL是Y方向 DIRECTION_HORIZONTAL为X方向
‘-返回参数说明: 转换后堤值
‘-使用语法示例: gFunPixelsToTwips 50,DIRECTION_VERTICAL
‘-参考:
‘-使用注意:
‘-兼容性: 97,2000,XP compatible
‘-作者: 王宇虹(参考微软KB),改进:王宇虹
‘-更新日期: 2002-08-26 ,2002-11-15
‘===============================================================================
Function
gFunPixelsToTwips(rlngPixels
As
Long
, rlngDirection
As
Long
)
As
Long
On
Error
GoTo
Err_gFunPixelsToTwips
Dim
lngDeviceHandle
As
Long
Dim
lngPixelsPerInch
As
Long
lngDeviceHandle = apiGetDC(0)
If
rlngDirection = DIRECTION_HORIZONTAL
Then
‘水平X方向
lngPixelsPerInch = apiGetDeviceCaps(lngDeviceHandle, LOGPIXELSX)
Else
‘垂直Y方向
lngPixelsPerInch = apiGetDeviceCaps(lngDeviceHandle, LOGPIXELSY)
End
If
lngDeviceHandle = apiReleaseDC(0, lngDeviceHandle)
gFunPixelsToTwips = rlngPixels * 1440 / rlngPixelsPerInch
Exit_gFunPixelsToTwips:
On
Error
Resume
Next
Exit
Function
Err_gFunPixelsToTwips:
MsgBox Err.Description, vbOKOnly + vbCritical,
"Error: "
& Err.Number
Resume
Exit_gFunPixelsToTwips
End
Function
标签:
原文地址:http://www.cnblogs.com/rosesmall/p/5047283.html