⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 040104.htm

📁 提供一个VB学习教程,入门级。来源于网上
💻 HTM
字号:
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>vb study</title>
<style>
<!--
td {font-size: 9pt}
A:link {text-decoration: none; color: #0033cc;font-size: 9pt}
A:visited {text-decoration: none; color: #0066CC;font-size: 9pt}
A:active {text-decoration: none; color: #ff0000; font-size: 9pt}
A:hover {text-decoration: underline; color: #000000;font-size: 9pt}
-->
</style>
</head>
<body>
<div align="center">
  <center>
  <table border="0" cellpadding="0" cellspacing="0" width="98%">
    <tr>
      <td width="100%"><a href="#">你的位置</a>:<a href="http://www.xxby.com" target="_blank">华生小屋</a>--<a href="#">VB学习</a>--<a href="#">API函数</a></td>
    </tr>
    <tr>
      <td width="100%">
        <p align="center">消息类函数</td>
    </tr>
    <tr>
      <td width="100%"><br>
        SendMessageA:发送消息,调用一个窗口的窗口函数,将一条消息发给那个窗口,除非消息处理完毕,否则该函数不会返回。其返回值为long型值(由具体消息决定),声明:<br>
        Declare Function SendMessage Lib &quot;user32&quot; Alias &quot;SendMessageA&quot; (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) as long<br>
        这是API中一个最重要的函数,通过这个函数,我们可让VB程序向外发送所有窗口消息,如关闭(WM_CLOSE)消息等等,查阅资料,对消息的常数值请参看API浏览器。<br>
        参数 类型及说明 <br>
        hwnd Long,要接收消息的那个窗口的句柄 <br>
        wMsg Long,消息的标识符 <br>
        wParam Long,具体取决于消息 <br>
        lParam Any,具体取决于消息 <br>
        例如在窗体上有一文本框text1,要获得其中文字的行数:<br>
        Const EM_GETLINECOUNT = &amp;HBA 这是消息标识号<br>
        Private Declare Function SendMessageA Lib &quot;user32&quot; _<br>
        (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _<br>
        ByVal lParam As Long) As Long<br>
        调用:<br>
        lastline = SendMessageA(Text1.hWnd, EM_GETLINECOUNT, 0, 0&amp;)<br>
        这里的lastline就等于text1中的文本行数。如=9,表示有9行。<br>
        PwdChangePasswordA:更改windows屏幕保护程序的密码<br>
        声明:Private Declare Function PwdChangePasswordA Lib &quot;mpr&quot; (ByVal _<br>
        lpcRegkeyname As String, ByVal hWnd As Long, ByVal uiReserved1 _<br>
        As Long, ByVal uiReserved2 As Long) As Long<br>
        调用:<br>
        Private Sub Command1_Click()<br>
        Call PwdChangePasswordA(&quot;SCRSAVE&quot;, Me.hWnd, 0, 0)<br>
        End Sub<br>
        =============================================<br>
        得到指定文本类窗口内的文本:WM_GETTEXT消息<br>
        这个消息获得1个指定文本类窗口内的文本,可以获得用**号掩盖了密码的文本窗口内的文本。消息的值为&amp;HD。消息本身的参数说明:wParam--字符串缓冲区长度;一般用WM_GETTEXTLENGTH消息获取值然后加1(结束符\0);lParam--字符串缓冲区,要用Space或String函数先打通足够长的空格,并用Byval指明传递字符串缓冲区地址,若不指明byval,因这个参数在SendMessage中是声明为Any的,并缺省为byref,不指明byval会传递首字符指针的指针,将出错!<br>
        在使用它之前一般要先用WM_GETTEXTLENGTH消息获取指定文本窗口内文本的长度(值为&amp;HE),以决定安排1个多长的字符串缓冲区存放获取的文本。<br>
        下面是个例子的一部分:<br>
        Dim ahwnd As Long<br>
        Private Sub Command1_Click()<br>
        ahwnd = CLng(Text3.Text) 输入1个文本类窗口句柄值<br>
        Dim abc As String 定义1个字符串缓冲区<br>
        x = SendMessage(ahwnd, WM_GETTEXTLENGTH, 0&amp;, 0&amp;) 获得窗口内字符数<br>
        x = x + 1 .设置缓冲区长度<br>
        abc = Space(x) <br>
        SendMessage ahwnd, WM_GETTEXT, x, ByVal abc 注意:要用&quot;byval 缓冲区&quot;。<br>
        Label2.Caption = &quot;字数:&quot; &amp; x<br>
        Text2.Text = abc 在程序中显示出获取的文本。<br>
        End Sub <br>
        ===============================================<br>
        调用当前屏幕保护程序:sendmessage函数的WM_SYSCOMMAND=&amp;H112&amp;消息和它的SC_SCREENSAVE=&amp;HF140&amp;参数。例下:<br>
        声明:<br>
        Public Const WM_SYSCOMMAND = &amp;H112&amp;<br>
        Public Const SC_SCREENSAVE = &amp;HF140&amp;<br>
        Declare Function SendMessage Lib &quot;user32&quot; Alias _<br>
        &quot;SendMessageA&quot; (ByVal hWnd As Long, _<br>
        ByVal wMsg As Long, ByVal wParam As Long, ByVal _<br>
        lParam As Long) As Long<br>
        调用:<br>
        Private Sub Command2_Click()<br>
        Call SendMessage(Me.hWnd, WM_SYSCOMMAND, SC_SCREENSAVE, 0&amp;)<br>
        End Sub<br>
        ---------------------------------------------<br>
        设置/取消文本框只读:EM_SETREADONLY消息(值为&amp;HCF)<br>
        声明:见SendMessageA函数。消息的固有参数wParam可为True(只读)或False(非只读),参数lParam为0&amp;.调用如:<br>
        lxn=SendMessageA(Text1.hWnd,EM_SETREADONLY , True,0&amp;)<br>
        ----------------------------------------------<br>
        文本框的自动滚动:WM_HSCROLL消息或WM_VSCROLL消息<br>
        WM_HSCROLL水平滚动消息的值是&amp;H114;WM_VSCROLL垂直滚动消息的值是&amp;H115.<br>
        声明见SendMessageA函数。<br>
        参数wParam的可能值有:<br>
        WM_HSCROLL消息:SB_LEFT=6,往左移。 SB_RIGHT=7,往右移。<br>
        SB_LINELEFT=0,往左移动1个单元格<br>
        SB_LINERIGHT=1,往右移动1个单元格<br>
        SB_PAGELEFT=2,往左移动较多部分。<br>
        SB_PAGERIGHT=3,往右移动较多部分。<br>
        WM_VSCROLL消息:SB_TOP=6;往上移。 SB_BOTTOM=7;往下移<br>
        SB_LINEUP=0;往上移动1个单元格<br>
        SB_LINEDOWN=1;往下移动1个单元格。<br>
        SB_PAGEUP=2,往上移动较多部分。<br>
        SB_PAGEDOWN=3,往下移动较多部分。<br>
        水平滚动与垂直滚动消息的wparam参数值实际是相同的。只不过一个是左右滚动,一个是上下滚动而已。<br>
        调用如:<br>
        Private Const WM_VSCROLL = &amp;H115<br>
        Private Const SB_LINEDOWN = 1<br>
        Private Sub Timer1_Timer()<br>
        x = SendMessageA(Text1.hwnd, WM_VSCROLL, SB_LINEDOWN, 0&amp;)<br>
        End Sub<br>
        ----------------------------------------------<br>
        禁止部分滚动:EM_SETRECTNP消息(值为&amp;HB4)<br>
        该消息指定控件内允许滚动的区域,反之,剩下的区域就不能滚动了。区域的坐标以控件的窗口坐标为准(单位:象素)。<br>
        消息参数:wParam:0;<br>
        lParam:为1个RECT型数,指定允许滚动的窗口内矩形区域。<br>
        例下:禁止文本框下半部分滚动 <br>
        Private Const EM_SETRECTNP = &amp;HB4<br>
        Private Type RECT RECT型数的声明<br>
        Left As Long<br>
        Top As Long<br>
        Right As Long<br>
        Bottom As Long<br>
        End Type<br>
        Dim lxn As RECT<br>
        Private Sub Form_Click()<br>
        Dim a As Long <br>
        ScaleMode = 3<br>
        lxn.Left = 0 <br>
        lxn.Top = 0<br>
        lxn.Right = Text1.Width<br>
        lxn.Bottom = Text1.Height / 2 控件上半部分区域允许滚动<br>
        a = SendMessageA(Text1.hwnd, EM_SETRECTNP, 0, lxn)<br>
        End Sub <br>
        ----------------------------------------------<br>
        撒消最近1次的编辑操作:EM_UNDO消息 <br>
        在许多编辑软件中可看到&quot;编辑&quot;菜单中有&quot;撒消&quot;命令,用的就是此消息。<br>
        此消息无参数(wParam,lParam视为0)。<br>
        在此消息之前,可先用EM_CANUNDO消息判断是否允许进行当前的&quot;撒消&quot;操作。<br>
        EM_CANUNDO消息也无参数。若返回True,则可&quot;撒消&quot;,若返回False,则不能撒消。<br>
        EM_UNDO的值为&amp;HC7.消息EM_CANUNDO的值为&amp;HC6.<br>
        调用如:<br>
        Private Sub Command3_Click()<br>
        Dim lxn As Long<br>
        lxn = SendMessageA(Text1.hwnd, EM_UNDO, 0&amp;, 0&amp;)<br>
        End Sub<br>
        ====================================================<br>
        截获指定窗口的Windows消息:GetMessageA函数<br>
        该函数用来获得当前系统向某个窗口发送的消息。声明:<br>
        Public Declare Function GetMessage Lib &quot;user32&quot; Alias &quot;GetMessageA&quot; (lpMsg As MSG, ByVal hwnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long) As Long<br>
        参数有lpMsg:返回截获的消息,hwnd:指定要截获哪个窗口的消息。wMsgFilterMin和wMsgfIlterMax参数大约是过滤消息范围吧(?),反正写0和1000就是。<br>
        结构类型MSG声明如下:<br>
        Private Type MSG<br>
        hwnd As Long 消息要发送的窗口句柄<br>
        message As Long 消息标识符(名称)<br>
        wParam As Long 消息自身参数1<br>
        lParam As Long 消息自身参数2<br>
        time As Long 消息经历的时间(?)<br>
        pt As POINTAPI 屏幕坐标 (?)<br>
        End Type<br>
        其中包含有个POINTAPI的声明如下:<br>
        Private Type POINTAPI<br>
        x As Long<br>
        y As Long<br>
        End Type<br>
        调用如:<br>
        Dim MYMSG As MSG<br>
        Dim returnCode As Boolean<br>
        Private Const WM_LBUTTONDOWN = &amp;H201<br>
        Private Sub Timer1_Timer()<br>
        DoEvents 使本程序中断,将控制权交给系统。(我没看懂)<br>
        returnCode = GetMessage(MYMSG, Me.hwnd, 0, 1000) <br>
        if MYMSG.message=WM_LBUTTONDOWN then MsgBox &quot;你按下了鼠标左键&quot;<br>
        End Sub
        <p align="center">
        <br>
        &lt; <a href="040103.htm">上一页</a>--<a href="http://www.xxby.com" target="_blank">华生小屋</a>--<a href="040105.htm">下一页</a>     
        &gt;<br>
      </td>
    </tr>
  </table>
  </center>
</div>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -