消息传递在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 LonghWnd:接收消息的窗口;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