设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2025|回复: 4
打印 上一主题 下一主题

[模块/函数] [原创]堤与像素尺寸单位的相互转换

[复制链接]

点击这里给我发消息

跳转到指定楼层
1#
发表于 2004-5-20 23:48:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2004-5-21 04:29:00 | 只看该作者
也可由此再加入转换英寸及CM的相关函数。
3#
发表于 2006-2-28 19:06:00 | 只看该作者
这个函数好像有问题,有人测试过吗?
4#
发表于 2006-2-28 21:07:00 | 只看该作者
再问个问题,800*600分辨率下,屏幕的水平和垂直方向分别800和600像素吗?又是多少缇?1024*768分辨率下呢?



谢谢。
5#
发表于 2010-11-6 07:34:23 | 只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2025-1-11 07:52 , Processed in 0.110119 second(s), 29 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表