Welcome

首页 / 软件开发 / VB / 消息传递在VB中的应用

消息传递在VB中的应用2008-03-08苏耀勇有些窗体在设计时会定义一些特殊的功能消息,而当我们传递这些消息给这类窗体时,这类窗口就会执行某段程序,并返回执行的结果。为了让程序可以送出消息,Windows提供了SendMessage API函数。

Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

hWnd:接收消息的窗口;

wMsg:消息的编号;

wParam:消息的第一个参数;

lParam:消息的第二个参数。

wParam及lParam参数的意义会随着wMsg参数而变,因此我们要传递消息给某一个窗体时,除了了解该消息的意义外,还要了解wParam及lparam的意义。

lParam参数在SendMessage定义句中为"lParam As Any",因此它有以下几中写法:

当数值为 0 时,写成:ByVal 0&

当为字符串常数 时,写成:ByVal "字符串的内容"

当为字符串变量时,写成:ByVal S

第一个实例:对窗体进行操作

下面我们对窗体的几个消息进行解释和应用:WM_GETTEXT:读取窗体的Caption属性;WMSETTEXT:设置窗体的Caption属性;WM_SYSCOMMAND(wParam=SC_MAXIMIZE):将窗体的属性设置为2;WM_SYSCOMMAND(wParam=SC_MINIMIZE):将窗体的属性设置为1;WM_SYSCOMMAND(wParam=SC_RESTORE):将窗体的属性设置为0;WM_SYSCOMMAND(wParam=SC_CLOSE):Unload窗体.

下面我们在窗体上放置几个Command控件和一个Text控件:

我们先把所需要的参数和API函数定义到模块里面:

Public Const WM_SYSCOMMAND = &H112
Public Const SC_CLOSE = &HF060& "关闭窗体
Public Const SC_MINIMIZE = &HF020& "最小化窗体
Public Const SC_MAXIMIZE = &HF030& "最大化窗体
Public Const SC_RESTORE = &HF120& "恢复窗体大小
Public Const WM_SETTEXT = &HC "设置窗体的Caption
Public Const WM_GETTEXT = &HD "取得窗体的caption
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

双击Command中放入:

Private Sub Command_Click(Index As Integer)
Dim S As String
S = String(80, Chr(0))
Select Case Index
Case 0
SendMessage Me.hwnd, WM_GETTEXT, Len(S), ByVal S "读出窗体的Caption
Text1.Text = Left(S, InStr(S, Chr(0)) - 1)
Case 1
"因为Text1.text属于Variant类型,所以一定先要用CStr把它转换成字符串
SendMessage Me.hwnd, WM_SETTEXT, 0, ByVal CStr(Text1.Text)"设置窗体的Caption
Case 2
SendMessage Me.hwnd, WM_SYSCOMMAND, SC_MAXIMIZE, ByVal 0&"使窗体最大化
Case 3
SendMessage Me.hwnd, WM_SYSCOMMAND, SC_MINIMIZE, ByVal 0&"使窗体最小化
Case 4
SendMessage Me.hwnd, WM_SYSCOMMAND, SC_RESTORE, ByVal 0&"使窗体恢复原来的大小
Case 5
SendMessage Me.hwnd, WM_SYSCOMMAND, SC_CLOSE, ByVal 0&"关闭窗体
End Select
End Sub