vb常用函数

发布时间 : 星期一 文章vb常用函数更新完毕开始阅读

SetWindowPos函数:使窗口停留在屏幕最顶层。 声明:

Private Declare Function SetWindowPos Lib \ByVal hWndinsertAfter As Long, ByVal x As Long, ByVal y As Long, _ ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long 调用如:

Private Sub Form_Load()

SetWindowPos hwnd, HWND_TOPMOST, 0, 0, 0, 0, &H2 + &H1 End Sub 窗口form1将保留在屏幕表面。

该函数功能是为窗口指定1个新的位置和状态。参数: hwnd:欲定位的窗口。

hwndinsertAfter:指定窗口的位置。 可能选用下述值之一: HWND_BOTTOM 将窗口置于窗口列表底部

HWND_TOP 将窗口置于Z序列的顶部;Z序列代表在分级结构中,窗口针对一个给定级别的窗口显示的顺序

HWND_TOPMOST(值-1) 将窗口置于列表顶部,并位于任何最顶部窗口的前面 HWND_NOTOPMOST(值-2) 将窗口置于列表顶部,并位于任何最顶部窗口的后面 x: 窗口新的x坐标。如hwnd是一个子窗口,则x用父窗口的客户区坐标表示 y: 窗口新的y坐标。如hwnd是一个子窗口,则y用父窗口的客户区坐标表示 cx:指定新的窗口宽度 cy:指定新的窗口高度

wFlags:包含了游标的一个整数,可能为下述值或其组合。 SWP_DRAWFRAME 围绕窗口画一个框 SWP_HIDEWINDOW 隐藏窗口 SWP_NOACTIVATE 不激活窗口

SWP_NOMOVE 保持当前位置(x和y设定将被忽略) SWP_NOREDRAW 窗口不自动重画

SWP_NOSIZE 保持当前大小(cx和cy会被忽略)

SWP_NOZORDER 保持窗口在列表的当前位置(hWndInsertAfter将被忽略) SWP_SHOWWINDOW 显示窗口

SWP_FRAMECHANGED 强迫一条WM_NCCALCSIZE消息进入窗口,即使窗口的大小没有改变 ======

移动无标题栏的窗口:在标准模块中声明

Declare Function ReleaseCapture Lib \ReleaseCapture函数:为当前程序释放鼠标捕获。 Declare Function SendMessage Lib \Alias \

ByVal hwnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, lParam As Any) As Long Public Const HTCAPTION = 2

Public Const WM_NCLBUTTONDOWN = &HA1 此消息指在窗口的非客户区域内按下左键 在FORM_mousedown事件中写:

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

ReleaseCapture (此句为释放鼠标本来在Form客户区的捕获) SendMessage hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0& End Sub ====

创建椭圆(不规则)窗口:SetWindowRgn函数结合CreateEllipticRgn椭圆函数

SetWindowRgn函数用来创建不规则窗口,如椭圆(结合CreateEllipticRgn),多边形(结合CreatePolygonRgn),矩形(结合CreateRectRgn),圆角矩形(结合CreateRoundRectRgn)等。 声明:

Private Declare Function CreateEllipticRgn Lib \Long, ByVal X2 As Long, ByVal Y2 As Long) As Long

Private Declare Function SetWindowRgn Lib \ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long 调用如:

Private Sub Form_Load()

SetWindowRgn hWnd, CreateEllipticRgn(0, 0, 300, 200), True End Sub

SetWindowRgn函数用于创建不规则窗口,可创建任何几何形状的窗口,只要用Create?Rgn函数返回值传入各种形状区域句柄,参数: 参数 类型及说明

hWnd:将设置其区域的窗口的句柄。

hRgn:设置好的区域的句柄,一旦设置了该区域,就不能使用或修改该区域句柄,也不要删除它 bRedraw:是否立即重画窗口,若为TRUE,则立即重画窗口

注:为区域指定的所有坐标都以窗口坐标(和客户坐标不完全相同)表示,它们以整个窗口(包括标题栏和边框,而客户坐标是指不包括标题栏的窗口内部有效区域)的左上角为起点 椭圆CreateEllipticRgn函数:创建一个椭圆,该椭圆以X1,Y1和X2,Y2坐标点确定的矩形内切。参数:

X1,Y1:内切矩形左上角X,Y坐标 X2,Y2:内切矩形右下角X,Y坐标 ====

得到屏幕有效区大小(除去任务条):SystemParametersInfoA 声明:

Private Type RECT Left As Long top As Long Right As Long Botton As Long End Type

Private Declare Function SystemParametersInfoA Lib \(ByVal uAction As Long, ByVal uParam As Long, ByRef lpvparam _ As Any, ByVal fuWinIni As Long) As Long 调用如:将窗体移到屏幕有效区中央。 Private Sub Command2_Click() Dim ScreenWidth& Dim ScreenHeight&

Dim ScreenLeft& Dim ScreenTop&

Dim DesktopArea As RECT Const SPI_GETWORKAREA = 48

Call SystemParametersInfoA(SPI_GETWORKAREA, 0, DesktopArea, 0)

ScreenHeight = (DesktopArea.Botton - DesktopArea.top) * Screen.TwipsPerPixelY ScreenWidth = (DesktopArea.Right - DesktopArea.Left) * Screen.TwipsPerPixelX ScreenLeft = DesktopArea.Left * Screen.TwipsPerPixelX ScreenTop = DesktopArea.top * Screen.TwipsPerPixelY

Form1.Move (ScreenWidth - Form1.Width) / 2 + ScreenLeft, (ScreenHeight - Form1.Height) / 2 + ScreenTop End Sub

SystemParametersInfoA函数可用来获取和设置数量众多的windows系统参数。 参数请查看资料。 ====

获得窗口在屏幕上的范围:GetWindowRect函数

包括窗口的边框,标题栏,滚动条及菜单,客户区等在内,即整个窗口在屏幕上所占的范围.声明: Declare Function GetWindowRect Lib \hwnd As Long, lpRect As RECT) As Long 第一个参数是窗口句柄,第二个参数装载窗口范围的坐标值,为一个结构类型,声明如下: Public Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type

该参数返回窗口在屏幕中的范围值,单位为象素。调用如: Private Sub Command1_Click() GetWindowRect Command1.hwnd, lxx

Print lxx.Left, lxx.Top, lxx.Right, lxx.Bottom End Sub

=========================================== 改变指定窗口的位置和大小:MoveWindow函数

相当于VB内置的Move方法,但作为API,功能当然更强大,它可对任何非本进程的窗口进行改变,声明:

Declare Function MoveWindow Lib \As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long 第一个参数为要移动的窗口句柄,第二,三,四,五个参数为窗口移动后的新横坐标,新纵坐标,新宽度,新高度,第六个参数为是否立即对窗口进行重画,用True或False。调用如: MoveWindow Command1.hwnd, 0, 0, 100, 100, True

因为改变的是对象在父窗口中的位置,所以Command1按纽被移到窗体Form1的客户区左上角去了。 =====

判断屏幕上1指定点的客户区坐标:ScreenToClient函数 判断屏幕上某点相对于指定窗口内的坐标。声明:

Private Type POINTAPI x As Long y As Long End Type

Private Declare Function ScreenToClient Lib \POINTAPI) As Long

该函数用以测量点lpPoint在句柄为hwnd的窗口内的坐标(如超越此窗口则为负数)。调用如: Private Sub Command1_Click() Dim lxn As POINTAPI lxn.x = 100: lxn.y = 100

Call ScreenToClient(Form1.hwnd, lxn) Print lxn.x, lxn.y End Sub

上例在调用前的lxn参数100,100是屏幕坐标,调用函数后lxn的值是\屏幕坐标为(100,100)的点在form1中的客户坐标是多少。如返回lxn.x=41,lxn.y=38,单位仍为象素,不会变为form1内部的缇。 ===

获得窗口内以客户坐标表示的1个点的屏幕坐标 : ClientToScreen函数

该函数与上面那个正好相反。这里是已知客户坐标求屏幕坐标。注:客户坐标单位须先转为象素。 声明:

Declare Function ClientToScreen Lib \As Long

参数hwnd:点所在的客户区窗口的句柄。

参数lpPoint:传入点的客户区坐标(单位要为象素),并返回点的屏幕坐标(象素)。 调用如:

Dim m As POINTAPI m.X = 50: m.Y = 70

a = ClientToScreen(Form1.hwnd, m) Print m.X, m.Y

该函数应用的是参数lpPoint返回值。 ======

获得屏幕上某指定点所在的窗口的句柄 : WindowFromPoint函数 声明:

Private Declare Function WindowFromPoint Lib \yPoint As Long) As Long

参数xPoint,yPoint是某点的\屏幕坐标\。函数返回值为包含该点的窗口句柄。 调用如:

Private Sub Command2_Click() Dim hwnd As Long

hwnd = WindowFromPoint(1, 1) Print hwnd End Sub

上例表示屏幕上点(1,1)处在句柄为hwnd的窗口内。

此函数返回的句柄不包含隐藏、屏蔽、透明窗口的。如果要指出屏幕上某点所属的所有窗口,就

联系合同范文客服:xxxxx#qq.com(#替换为@)