VB获得任务栏高度
PublicDeclareFunctionSystemParametersInfoLib"user32"Alias"SystemParametersInfoA"(ByVa...
Public Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByRef lpvParam As Any, ByVal fuWinIni As Long) As Long
Public Const SPI_GETWORKAREA = 48
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Function GetTaskbarHeight() As Integer
Dim lRes As Long
Dim rectVal As RECT
lRes = SystemParametersInfo(SPI_GETWORKAREA, 0, rectVal, 0)
GetTaskbarHeight = ((Screen.Height / Screen.TwipsPerPixelX) - rectVal.Bottom) * Screen.TwipsPerPixelX{请高手详解此句) 展开
Public Const SPI_GETWORKAREA = 48
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Function GetTaskbarHeight() As Integer
Dim lRes As Long
Dim rectVal As RECT
lRes = SystemParametersInfo(SPI_GETWORKAREA, 0, rectVal, 0)
GetTaskbarHeight = ((Screen.Height / Screen.TwipsPerPixelX) - rectVal.Bottom) * Screen.TwipsPerPixelX{请高手详解此句) 展开
展开全部
Screen.Height / Screen.TwipsPerPixelX --->这是把屏幕的绝对高度单位由缇转为像素
(Screen.Height / Screen.TwipsPerPixelX) - rectVal.Bottom --->这是把屏幕高度减去工作区高度(计算结果就是任务栏的高度了,单位为像素)
((Screen.Height / Screen.TwipsPerPixelX) - rectVal.Bottom) * Screen.TwipsPerPixelX --->这是把上述计算结果的单位由像素转为VB默认的缇
补充说明:此语句存在下属错误或缺陷:
1、任务栏并不是固定在屏幕下方的,也可以是上边、左边或右边的(尽管很少有人这么做),如果出现后面这些情况,那么程序的计算结果就是不准确的;
2、计算工作区的高度(或宽度)时,要把Bottom-Top(或Right-Left),因为Top(或Left)是不一定为0的(见上述1);
3、Screen.TwipsPerPixelX用错了,应该是Screen.TwipsPerPixelY,前者是屏幕横向每像素多少缇,是用来转换屏幕宽度单位的,后者则是屏幕纵向每像素多少缇,这才是用来转换屏幕高度单位的。不过在绝大部分情况下,这两个值是相等的(都是15),所以程序运行结果不会出错,但是作为程序必须严谨,因为说不定你的程序要运行在一些特殊的屏幕上呢(这时候两个值就不一定相等了)?
(Screen.Height / Screen.TwipsPerPixelX) - rectVal.Bottom --->这是把屏幕高度减去工作区高度(计算结果就是任务栏的高度了,单位为像素)
((Screen.Height / Screen.TwipsPerPixelX) - rectVal.Bottom) * Screen.TwipsPerPixelX --->这是把上述计算结果的单位由像素转为VB默认的缇
补充说明:此语句存在下属错误或缺陷:
1、任务栏并不是固定在屏幕下方的,也可以是上边、左边或右边的(尽管很少有人这么做),如果出现后面这些情况,那么程序的计算结果就是不准确的;
2、计算工作区的高度(或宽度)时,要把Bottom-Top(或Right-Left),因为Top(或Left)是不一定为0的(见上述1);
3、Screen.TwipsPerPixelX用错了,应该是Screen.TwipsPerPixelY,前者是屏幕横向每像素多少缇,是用来转换屏幕宽度单位的,后者则是屏幕纵向每像素多少缇,这才是用来转换屏幕高度单位的。不过在绝大部分情况下,这两个值是相等的(都是15),所以程序运行结果不会出错,但是作为程序必须严谨,因为说不定你的程序要运行在一些特殊的屏幕上呢(这时候两个值就不一定相等了)?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询