消息传递在VB中的应用

有些窗体在设计时会定义一些特殊的功能消息,而当我们传递这些消息给这类窗体时,这类窗口就会执行某段程序,并返回执行的结果。为了让程序可以送出消息,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

时间: 2024-10-25 09:39:36

消息传递在VB中的应用的相关文章

vb中,用变量作为数组名可以吗

问题描述 vb中,用变量作为数组名可以吗 vb中,用变量作为数组名可以吗? 例如 arrrrstr()=("as","se") for i=0 to 1 for j=1 to 25 linestr=aeerrstr(i)(j)&"," next j next i 解决方案 将arrstr(i)作为变量名?可以的 解决方案二: 好久不用VB了, 好像是這樣的 dim arrrrstr(2,25) as string 解决方案三: Agoni

ASP进阶:VB中的模块,类,ActiveX与API的使用

active|activex 这几天搞了点c/s结构的程序设计, 由于ASP用得比较熟练,所以VB6.0自然成为我首选的开发工具. 在学习过程中,我结合自己的经验总结下VB中的一些高级应用,并且体会这种应用给我们所带来的好处. 一.模块 (Module) 在VB中,模块会优先执行,其实说白了,模块就象是全局的过程和函数调用.这是初步的提高代码可复用性的途径.我想有经验的ASP(VBSCRIPT,以后都只用VBScript来写Asp程序)程序员都用过<!--#Include file="&q

在VB中动态创建数据库

在VB中动态创建数据库新建工程.添加控件 对应写上代码 以下为引用的内容:Private Sub Command2_Click()    Dim myDB As DAO.Database    'Set myDB = DAO.OpenDatabase("d:\mydb3.mdb")    Set myDB = DAO.OpenDatabase(App.Path + "/mydb.mdb")    Dim d As String    d = "delete

在VB中兼容非ACCESS数据库的技巧

本文从VB数据库体系结构的角度出发,结合一个具体实例,阐述了在VB中兼容非ACCESS格式数据库的具体方法和技巧. 关键词:VB.非ACCESS数据库.数据存取对象 一个完整的数据库管理系统(DBMS)应是能兼容市面上各种较流行数据格式的系统,它充分考虑了不同用户的实际要求.鉴于目前市面上有多种数据库格式(如Foxpro.DBase.Paradox等)流行,因而在VB数据库应用程序中兼容非ACCESS数据库就显得尤为重要了. 作为一种流行的开发平台,VB提供了强大的数据库功能.主要有以下三种:数

浅谈crystal reports在VB中的调用

环境:VB6.0,crystal reports 9.0 在一个项目中用到了crystal reports,总结一些经验和教训. 以做一张单据的套打为例. 单据包括单据头,单据体.单据头和单据体可能是一对多的关系.并且他们分别存在于两张表当中,用字段FID做关联.要求能够动态的传入参数FID,显示不同的结果. 首先,打开crystal reports,做好一张单据的模板rpt.制作报表的方法有很多,比如:用它的图形化工具直接建立几个表之间的连接,然后将想要显示的字段托到报表当中:或是调用一个已经

VB中通过WMI控制DNS服务器,可在ASP中调用

dns服务器|控制 在VB中要使用Scripting API for WMI,必须引用 Microsoft WMI Scripting V1.1 Library 下面介绍Scripting API For WMI的几个对象 SWbemLocator--用于取得SWbemServices对象,他代表了本地或远程计算机上名字空间的一个连接.SWbemService--代表名字空间的一个连接,可用于处理它的部件SWbemObject--代表一个单独的类定义或一个对象实例SWbemOjbectSet--

如何实现给定日期的若干天以后的日期(有点类似VB中的DateAdd)

如何实现给定日期的若干天以后的日期(有点类似VB中的DateAdd)/*  豆腐制作  都是精品  http://www.asp888.net 豆腐技术站  如转载 请保留完整版权信息*/这几天突然有很多的人问这样的问题,就是如何在PHP中实现在VB中的DateAdd的函数,呵呵!这个可是问个正着.本来这个问题是 豆腐 去 华为 应聘的时候的一个考试题,不过当时是用C++实现的.没有想到这样的大公司,竟然用这样的小儿科来考试:),后来我没有去,这两天 应 http://www.chinaspx.

在VB中使用水晶报表的一种简易编程方法

编程|水晶报表       水晶报表(Crystal Report)的业内最专业.功能最强的报表系统,它除了强大的报表功能外,最大的优势是实现了与绝大多数流行开发工具的集成和接口.在VS.Net平台做过报表开发的程序员,一定都对水晶报表强大.高效.集成等特性留下了深刻印象.除了开发新程序外,在工作中我们常需要接触到很多较早的软件系统报表功能升级的需求,如果能结合水晶报表这一强大的工具,往往能事半功倍.       VB是以前流行的数据库开发平台,用其开发的C/S系统在社会上有非常大的保有量,但V

在vb中实现鼠标手势

在vb中实现鼠标手势 1.什么是鼠标手势: 我的理解,按着鼠标某键(一般是右键)移动鼠标,然后放开某键,程序会识别你的移动轨迹,做出相应的响应. 2.实现原理: 首先说明一下,我在网上没有找到相关的文档,我的方法未必与其他人是一致的,实际效果感觉还可以. 鼠标移动的轨迹我们可以将其看成是许多小段直线组成的,然后这些直线的方向就是鼠标在这段轨迹中的方向了.3.实现代码: 还要说明一下, a)要捕获鼠标的移动事件,可以使用vb中的mousemove事件,但这个会受到一些限制(例如,在webbrows