首页 > 其他分享 >VB6.0window消息处理方式

VB6.0window消息处理方式

时间:2023-03-12 10:13:59浏览次数:35  
标签:Function VB 窗口 frmChild 处理 ByVal Long VB6.0 window

Attribute VB_Name = "Module1"
Option Explicit


Public Const WM_NCHITTEST = &H84 '移动鼠标,按住或释放鼠标时产生此消息
Public Const HTCAPTION = 2 '不返回给系统
Public Const HTCLIENT = 1 '正常返回给系统
Public Const WM_NCACTIVATE = &H86 '通过改变某个窗口的非客户区来表示窗口是处于激活还是非激活状态时,此消息被发送给该窗口


Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long


Public Const GWL_WNDPROC = -4 '为窗口设定一个新的处理函数。
Global lpPrevWndProc As Long
Private ab As Boolean


' 这里是关键,我自定义了一个窗口函数(回调函数),以替代 VB 窗体自己的默认窗口函数。' 窗口函数是干什么的?它就是负责处理 Windows 发送给它的消息,并加以过滤,筛选出它感兴趣' 的消息,映射成为事件供我们使用。VB 中每个窗口都有一个默认的窗口函数,我们是看不到的。' 有很多消息都被 VB 的默认窗口函数过滤掉了。了解 C/C++/Delphi 程序设计的朋友应该知道这些。


Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  ' 我们也进行消息过滤,不过我们指拦截我们感兴趣的消息
  ' 其他消息我们懒得处理,交给 VB 默认的窗口函数去处理吧。
  If uMsg <> "307" Then
    'frmChild.Text1 = frmChild.Text1 & "," & uMsg
  End If
  Select Case uMsg
    Case WM_NCACTIVATE  ' 拦截 通过改变某个窗口的非客户区来表示窗口是处于激活还是非激活状态时,此消息被发送给该窗口
        If ab = False Then
            'ab = True
            frmChild.Text1 = frmChild.Text1 & "," & uMsg
            frm3.Show vbModal
        End If
        WindowProc = HTCLIENT
        Exit Function '不返回给系统
'      Else
'        ' 其他的我们不管,还是规规矩矩的该怎么样就怎么样
'        WindowProc = HTCLIENT
'        Exit Function
'      End If
  End Select
  ' 这里又是关键,因为其他我们不关心的消息我们自己不处理,所以必须由 VB 的默认处理函数处理
  ' lpPrevWndProc 其实就是一个函数指针,它指向 VB 默认窗口函数
  WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
End Function

 

 

 

 

 

VERSION 5.00
Begin VB.Form frmMain 
   Caption         =   "Form1"
   ClientHeight    =   4575
   ClientLeft      =   120
   ClientTop       =   450
   ClientWidth     =   8235
   LinkTopic       =   "Form1"
   ScaleHeight     =   4575
   ScaleWidth      =   8235
   StartUpPosition =   3  '窗口缺省
   Begin VB.CommandButton Command1 
      Caption         =   "Command1"
      Height          =   615
      Left            =   1560
      TabIndex        =   0
      Top             =   360
      Width           =   1455
   End
End
Attribute VB_Name = "frmMain"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Sub Command1_Click()
    frmChild.Show 1
End Sub

 

 

VERSION 5.00
Begin VB.Form frmChild 
   Caption         =   "Form1"
   ClientHeight    =   6660
   ClientLeft      =   120
   ClientTop       =   450
   ClientWidth     =   11385
   LinkTopic       =   "Form1"
   ScaleHeight     =   6660
   ScaleWidth      =   11385
   StartUpPosition =   3  '窗口缺省
   Begin VB.TextBox Text1 
      Height          =   6615
      Left            =   0
      MultiLine       =   -1  'True
      TabIndex        =   0
      Top             =   0
      Width           =   11415
   End
End
Attribute VB_Name = "frmChild"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Sub Form_Load()
    'gHW = Me.hwnd  ' 保存窗体的句柄
  ' 下面是关键,完成两个工作:1、将我们自己的全局函数替换为新的窗体回调函数
  ' 2、保存原来的 VB 默认窗户口函数地址
  lpPrevWndProc = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub

下载地址源于:http://www.gycehuags.com/news/670.html

 

标签:Function,VB,窗口,frmChild,处理,ByVal,Long,VB6.0,window
From: https://www.cnblogs.com/gycehuags/p/17207667.html

相关文章

  • Windows Terminal相关
    WindowsTerminal相关查询分发给子系统的WSL版本wsl--list--verbose若要将分发版设置为受某一WSL版本支持,请运行:wsl--set-version<distributionname><version......
  • Java基础四-异常处理/集合框架以及泛型
    异常的处理编写程序时,代码可能会重新啊运行错误或编译错误,为了处理问题可以使用异常机制异常包括错误类型,原因和位置异常的体系结构 如何进行异常处理java异常......
  • 宏任务&微处理
    事件循环JavaScript语言的一大特点就是单线程,同一个时间只能做一件事。为了协调事件、用户交互、脚本、UI渲染和网络处理等行为,防止主线程的不阻塞,EventLoop的方案应......
  • Zabbix监控Tomcat开启JMX时修改catalina.sh文件后tomcat服务起不来/配置catalian.sh不
    zabbix监控tomcat,开启JMX修改catalina.sh文件,tomcat服务起不来问题现象(配置Catalina.sh脚本,开启JMX不起效)问题一:配置完脚本,重启tomcattomcat服务启动失败查看tomcat的ca......
  • flink入门-流处理
    入门需要掌握:从入门demo理解、flink系统架构(看几个关键组件)、安装、使用flink的命令跑jar包+flink的webUI界面的监控、常见错误、调优一、入门demo:统计单词个数0、......
  • 图像处理之均值滤波3
    ​​​​1概述均值滤波,是最简单的一种滤波操作,输出图像的每一个像素是核窗口内输入图像对应像素的平均值(所有像素加权系数相等),其实说白了它就是归一化后的方框滤波。我们在......
  • sql处理重复的列,更好理清分组和分区
    一、分组统计、分区排名1、语法和含义:如果查询结果看得有疑惑,看第二部分-sql处理重复的列,更好理清分组和分区,有建表插入数据的sql语句分组统计:GROUPBY结合统计/......
  • Gin学习笔记--使用路由组分类处理请求
    在实际的项目开发中,均是模块化开发,同一模块化的功能接口,往往会有相同的接口前缀,比如说用户有不同的注册,登录等注册:http:..localhost:8080/user/register登录:http://loca......
  • 国外SEO舆情处理最佳黄金时间
    在国外市场,SEO(搜索引擎优化)的舆情处理是非常重要的,因为它可以帮助提高网站的排名和流量,并且建立品牌的声誉和信誉。然而,在什么时间进行舆情处理是一个值得探讨的问题。在本......
  • Cat异常处理
    一.目的本文档编写的目前,简单描述如果使用cat平台,来优化我们的SaaS服务。发现程序运行异常,慢SQL,慢方法,提供SaaS服务的稳定性二.Cat使用  教程简单看一下,花1......