2024年2月21日发(作者:)
VB中利用API获取屏幕DPI值
在屏幕上放置三个label控件,分别为label1 , label2 , label3
******************************************************
Private Declare Function GetDC Lib "" (ByVal hwnd As Long) As Long
Private Declare Function GetDeviceCaps Lib "" (ByVal hdc As Long, ByVal nIndex As
Long) As Long
Private Const LOGPIXELSX As Long = 88
Private Const LOGPIXELSY As Long = 90
Private Sub Form_Load()
Dim dpi_x As Long
Dim dpi_y As Long
Dim hdc0 As Long
hdc0 = GetDC(0)
dpi_x = GetDeviceCaps(hdc0, LOGPIXELSX)
dpi_y = GetDeviceCaps(hdc0, LOGPIXELSY)
Label1 = "DPI_X=" & dpi_x
Label2 = "DPI_Y=" & dpi_y
Label3 = "1 像素 = " & 1440 / dpi_x & " 缇"
End Sub
****************************************************************
以下为API函数说明
GetDeviceCaps
VB声明
Declare Function GetDeviceCaps Lib "gdi32" Alias "GetDeviceCaps" (ByVal hdc As Long, ByVal nIndex
As Long) As Long
说明
根据指定设备场景代表的设备的功能返回信息
返回值
Long,参见GetDeviceCaps索引表
参数表
参数
hdc
nIndex
类型及说明
Long,要查询其设备的信息的设备场景
Long,根据GetDeviceCaps索引表所示常数确定返回信息的类型
Top
GetDC
VB声明
Declare Function GetDC Lib "user32" Alias "GetDC" (ByVal hwnd As Long) As Long
说明
获取指定窗口的设备场景
返回值
Long,指定窗口的设备场景句柄,出错则为0
参数表
参数
hwnd
注解
若窗口所属类具有CS_OWNDC, CS_CLASSDC 或 CS_PARENTDC样式,则获取的设备场景属窗口或类专有。vb的窗体和图片框控件也是这种情况,它用该函数取得的结果和控件的hdc属性相同(在autoredraw为FALSE时)。您无须考虑取回的窗体或图片框控件设备场景的默认状态,特别是绘图对象。另外,默认状态随着窗体和控件autoredraw属性的设置而不同。在设备场景释放前您必须回复其状态为初始值。对于没有CS_OWNDC, CS_CLASSDC 或 CS_PARENTDC样式的窗口的设备场景,可从通用windows缓存中获取,其状态为默认值。缓存中可用设备场景数量是有限的,因此只要可能就释放设备场景
用本函数获取的设备场景一定要用ReleaseDC函数释放,不能用DeleteDC
Top
GetDeviceCaps索引表
常数
DRIVERVERSION
返回信息
设备驱动程序版本
下列常数之一:
TECHNOLOGY
DT_PLOTTER:绘图仪。DT_RASDISPLAY:光栅显示器。DT_RASPRINTER:光栅打印机。DT_RASCAMERA:光栅照相机。DT_CHARSTREAM:字符流。DT_METAFILE:图元文件。DT_DISPFILE:显示文件
HORZSIZE
VERTSIZE
HORZRES
VERTRES
LOGPIXELSX
以毫米为单位的显示宽度
以毫米为单位的显示高度
以像素为单位的显示宽度
以像素为单位的显示高度
像素/逻辑英寸(水平)
类型及说明
Long,将获取其设备场景的窗口的句柄。若为0,则要获取整个屏幕的DC
LOGPIXELSY
BITSPIXEL
PLANES
NUMBRUSHES
NUMPENS
NUMMARKERS
NUMFONTS
NUMCOLORS
ASPECTX
ASPECTY
ASPECTXY
PDEVICESIZE
像素/逻辑英寸(垂直)
位/像素(每个调色板)
调色板个数
设备内建刷子个数
设备内建画笔个数
设备内建标记数
设备内建字体数
设备颜色表入口
设备像素宽度(见ASPECTXY)
设备像素高度(见ASPECTXY)
设备像素对角尺寸。这些值是互相对应的,比如((ASPECTX^2)+(ASPECTY^2))^.5
= ASPECTXY
PDEVICE内部结构的大小
下列常数之一:
CLIPCAPS
CP_NONE:设备没有内建剪切
CP_RECTANGLE:设备可剪切矩形
CP_REGION:设备可剪切区域
SIZEPALETTE
NUMRESERVED
BLTALIGNMENT
COLORRES
DESKTOPHORIZRES
DESKTOPVERTRES
PHYSICALOFFSETX
系统调色板入口(见RASTERCAPS RC_PALETTE标志)
系统调色板保留入口
有的显示设备在图象对齐本常数值指定的地址范围时可更快的完成图象运算。若没有区别则为0
颜色分辨率(以位/像素位单位,见RASTERCAPS RC_PALETTE标志)
桌面水平和垂直分辨率(仅适用于NT)。某些设备支持虚拟桌面可比物理显示尺寸大
打印机的可打印区的水平/垂直偏移
PHYSICALOFFSETY
PHYSICALHEIGHT
以设备单元表示的打印页面物理高/宽度
PHYSICALWIDTH
SCALINGFACTORX
打印机水平和垂直缩放系数
SCALINGFACTORY
VREFRESH 显示垂直刷新(只适用于NT)
由下列值组成的标志:
R_BANDING:设备支持频带。RC_BIGFONT:字体可大于64K。RC_BITBLT:支持BitBlt。RC_BITMAP64K:位图可大于64K。RC_DI_BITMAP:支持SetDIBits和RASTERCAPS GetDIBits函数。RC_DIBTODEV:支持SetDIBitsToDevice函数。RC_FLOODFILL:支持FloodFill API。RC_NONE:不支持光栅操作。RC_PALETTE:设备基于调色板。 RC_SAVEBITMAP:可存储位图。RC_SCALING:内建缩放。RC_STRETCHBLT:支持 StretchBlt 。RC_STRETCHDIB:支持StretchDIBits
CURVECAPS 描述内部曲线生成功能的标志。见api32。txt文件中关于CC_xxx的完整列表
LINECAPS
POLYGONCAPS
描述内部直线生成功能的标志。见api32。txt文件中关于LC_xxx的完整列表
描述内部多边形生成功能的标志。见api32。txt文件中关于PC_xxx的完整列表
由下列值组成的标志:
TC_OP_CHARACTER:字体可被放在任意位置。TC_OP_STROKE:设备可删除内部字体任意笔画。 TC_CP_STROKE:内部字体可据任意像素剪切。TC_CR_90:字体可被旋转90度 。TC_CR_ANY:支持字符旋转 。TC_SF_X_YINDEP:支持字符X和Y方向独立缩放。TC_SA_DOUBLE:内部字体尺寸可被放大一倍。TC_SA_INTEGER:内部字体可以整数倍缩放。TC_SA_CONTIN:内部字体可被连续缩放。TC_EA_DOUBLE: 设备可创建粗体字。TC_IA_ABLE:设备可创建斜体字。TC_UA_ABLE: 设备可建带下划线字。TC_SO_ABLE: 设备可创建加框字。TC_RA_ABLE:支持光栅字体。TC_SCROLLBLT:支持光栅字体。TC_VA_ABLE: 支持矢量字体
TEXTCAPS


发布评论