vb常用函数 下载本文

第1个参数为某窗口句柄。第2个参数为字符串缓冲区,第3个参数为缓冲区长度。 参数lpClassName返回值为窗口类名称字符串,如上例为ThunderFormDC类。 函数返回值为类名字符串长度。如上面nlen为13。 ====

创建不规则窗口之\圆角矩形\:SetWindowRgn结合CreateRoundRectRgn函数 SetWindowRgn函数用于创建各种几何形状的窗口,声明前面已有,为:

Public Declare Function SetWindowRgn Lib \Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long

第1个参数为窗口句柄,第2个参数为几何形状区域句柄,第3个参数为是否立即重画。 函数CreateRoundRectRgn为创建圆角矩形,函数返回创建的圆角区域句柄。声明:

Public Declare Function CreateRoundRectRgn Lib \Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long 参数就是三个(X,Y)值,X1,Y1为左上角坐标,因为是用窗口自身坐标系统来度量,所以左上角坐标一般为0,0(注:FORM窗体为scaleleft,scaletop),X2,Y2为右下角坐标(注意不一定是直接的width或scalewidth,要用scaleleft+scalewidth才是\右下角\横坐标):如果是控件,就是其width,height的值,而如果是窗体,要加上其scaleleft,scaletop

得到右下角坐标值。X3,Y3表示圆角的大小。X3的取值范围是0(无圆角)到矩形宽(width或scalewidth,全圆),Y3的取值范围是0(无圆角)到矩形高(height或scaleheight,全圆),常乘以一个0至1的单精度数来表示。例如:

x = SetWindowRgn(form1.hwnd, CreateRoundRectRgn(form1.ScaleLeft, form1.ScaleTop, form1.ScaleWidth + form1.ScaleLeft, form1.ScaleHeight + form1.ScaleTop, form1.ScaleWidth * 0.6, form1.ScaleHeight * 0.6), True)

最后说明一下,还有一个API函数可直接画圆角矩形,就是RoundRect函数。声明:

Declare Function RoundRect Lib \As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long 其中参数hDC是窗口的设备场景句柄。三个(X,Y)和CreateRoundRectRgn的是一样的,分别为左上角,右下角坐标和圆角大小。 ======

获取本程序活动窗口的句柄:GetActiveWindow函数 声明:

Declare Function GetActiveWindow Lib \

很简单,函数返回值为当前本程序活动窗口句柄。调用如:x=GetActiveWindow,这个函数不如GetForegroundWindow函数,建议用下面的: ----

获取屏幕上当前活动窗口的句柄:GetForegroundWindow函数 这个函数功能更强大,能获取前台应用程序的活动窗口句柄。声明: Declare Function GetForegroundWindow Lib \函数返回值为当前屏幕上活动窗口的句柄,如:x=GetForegroundWindow。 -----

判断一个窗口是否是活动窗口:IsWindowEnabled函数 声明:

Declare Function IsWindowEnabled Lib \ 参数hwnd是待检测窗口句柄。

调用如:x=IsWindowEnabled(Form1.hwnd),函数返回值若非0表示为活动窗口,返回0表示为失

效窗口。 ----

禁止任务条--任务条所属窗口类为\用FindWindowA函数去查,如下: TaskBarhWnd = FindWindowA(\,然后用EnableWindow函数: lxn = EnableWindow(TaskBarhWnd,0)就可以了。

消息类函数

SendMessageA:发送消息,调用一个窗口的窗口函数,将一条消息发给那个窗口,除非消息处理完毕,否则该函数不会返回。其返回值为long型值(由具体消息决定),声明:

Declare Function SendMessage Lib \ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) as long

这是API中一个最重要的函数,通过这个函数,我们可让VB程序向外发送所有窗口消息,如关闭(WM_CLOSE)消息等等,查阅资料,对消息的常数值请参看API浏览器。 参数 类型及说明

hwnd Long,要接收消息的那个窗口的句柄 wMsg Long,消息的标识符 wParam Long,具体取决于消息 lParam Any,具体取决于消息

例如在窗体上有一文本框text1,要获得其中文字的行数: Const EM_GETLINECOUNT = &HBA 这是消息标识号

Private Declare Function SendMessageA Lib \

(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _ ByVal lParam As Long) As Long 调用:

lastline = SendMessageA(Text1.hWnd, EM_GETLINECOUNT, 0, 0&) 这里的lastline就等于text1中的文本行数。如=9,表示有9行。 PwdChangePasswordA:更改windows屏幕保护程序的密码

声明:Private Declare Function PwdChangePasswordA Lib \_ lpcRegkeyname As String, ByVal hWnd As Long, ByVal uiReserved1 _ As Long, ByVal uiReserved2 As Long) As Long 调用:

Private Sub Command1_Click()

Call PwdChangePasswordA(\End Sub

============================================= 得到指定文本类窗口内的文本:WM_GETTEXT消息

这个消息获得1个指定文本类窗口内的文本,可以获得用**号掩盖了密码的文本窗口内的文本。消息的值为&HD。消息本身的参数说明:wParam--字符串缓冲区长度;一般用WM_GETTEXTLENGTH消息获取值然后加1(结束符\\0);lParam--字符串缓冲区,要用Space或String函数先打通足够长的空格,并用Byval指明传递字符串缓冲区地址,若不指明byval,因这个参数在SendMessage中是声明为Any的,并缺省为byref,不指明byval会传递首字符指针的指针,将出错!

在使用它之前一般要先用WM_GETTEXTLENGTH消息获取指定文本窗口内文本的长度(值为&HE),

以决定安排1个多长的字符串缓冲区存放获取的文本。 下面是个例子的一部分: Dim ahwnd As Long

Private Sub Command1_Click()

ahwnd = CLng(Text3.Text) 输入1个文本类窗口句柄值 Dim abc As String 定义1个字符串缓冲区

x = SendMessage(ahwnd, WM_GETTEXTLENGTH, 0&, 0&) 获得窗口内字符数 x = x + 1 .设置缓冲区长度 abc = Space(x)

SendMessage ahwnd, WM_GETTEXT, x, ByVal abc 注意:要用\缓冲区\。 Label2.Caption = \字数:\

Text2.Text = abc 在程序中显示出获取的文本。 End Sub

===============================================

调用当前屏幕保护程序:sendmessage函数的WM_SYSCOMMAND=&H112&消息和它的SC_SCREENSAVE=&HF140&参数。例下: 声明:

Public Const WM_SYSCOMMAND = &H112& Public Const SC_SCREENSAVE = &HF140&

Declare Function SendMessage Lib \\

ByVal wMsg As Long, ByVal wParam As Long, ByVal _ lParam As Long) As Long 调用:

Private Sub Command2_Click()

Call SendMessage(Me.hWnd, WM_SYSCOMMAND, SC_SCREENSAVE, 0&) End Sub

--------------------------------------------- 设置/取消文本框只读:EM_SETREADONLY消息(值为&HCF)

声明:见SendMessageA函数。消息的固有参数wParam可为True(只读)或False(非只读),参数lParam为0&.调用如:

lxn=SendMessageA(Text1.hWnd,EM_SETREADONLY , True,0&) ---------------------------------------------- 文本框的自动滚动:WM_HSCROLL消息或WM_VSCROLL消息

WM_HSCROLL水平滚动消息的值是&H114;WM_VSCROLL垂直滚动消息的值是&H115. 声明见SendMessageA函数。 参数wParam的可能值有:

WM_HSCROLL消息:SB_LEFT=6,往左移。 SB_RIGHT=7,往右移。 SB_LINELEFT=0,往左移动1个单元格 SB_LINERIGHT=1,往右移动1个单元格 SB_PAGELEFT=2,往左移动较多部分。 SB_PAGERIGHT=3,往右移动较多部分。

WM_VSCROLL消息:SB_TOP=6;往上移。 SB_BOTTOM=7;往下移 SB_LINEUP=0;往上移动1个单元格

SB_LINEDOWN=1;往下移动1个单元格。 SB_PAGEUP=2,往上移动较多部分。 SB_PAGEDOWN=3,往下移动较多部分。

水平滚动与垂直滚动消息的wparam参数值实际是相同的。只不过一个是左右滚动,一个是上下滚动而已。 调用如:

Private Const WM_VSCROLL = &H115 Private Const SB_LINEDOWN = 1 Private Sub Timer1_Timer()

x = SendMessageA(Text1.hwnd, WM_VSCROLL, SB_LINEDOWN, 0&) End Sub

---------------------------------------------- 禁止部分滚动:EM_SETRECTNP消息(值为&HB4)

该消息指定控件内允许滚动的区域,反之,剩下的区域就不能滚动了。区域的坐标以控件的窗口坐标为准(单位:象素)。 消息参数:wParam:0;

lParam:为1个RECT型数,指定允许滚动的窗口内矩形区域。 例下:禁止文本框下半部分滚动 Private Const EM_SETRECTNP = &HB4 Private Type RECT RECT型数的声明 Left As Long Top As Long Right As Long Bottom As Long End Type Dim lxn As RECT

Private Sub Form_Click() Dim a As Long ScaleMode = 3 lxn.Left = 0 lxn.Top = 0

lxn.Right = Text1.Width

lxn.Bottom = Text1.Height / 2 控件上半部分区域允许滚动 a = SendMessageA(Text1.hwnd, EM_SETRECTNP, 0, lxn) End Sub

---------------------------------------------- 撒消最近1次的编辑操作:EM_UNDO消息

在许多编辑软件中可看到\编辑\菜单中有\撒消\命令,用的就是此消息。 此消息无参数(wParam,lParam视为0)。

在此消息之前,可先用EM_CANUNDO消息判断是否允许进行当前的\撒消\操作。 EM_CANUNDO消息也无参数。若返回True,则可\撒消\,若返回False,则不能撒消。 EM_UNDO的值为&HC7.消息EM_CANUNDO的值为&HC6. 调用如:

Private Sub Command3_Click()