vfb控件数组的实现原理(visual freebasic ide),64位VB6 vb7

vfb控件数组的实现原理(visual freebasic ide),64位VB6 vb7

vbnet 复制代码
Sub Form1_Command1_BN_Clicked(ControlIndex As Long, hWndForm As hWnd, hWndControl As hWnd)
   MsgBox ("Command1 ControlIndex=" & ControlIndex   & ",Command1(x).Caption =" & Command1( ControlIndex).Caption & ",hWnd=" &  Command1( ControlIndex).hWnd)  
                
End Sub

IDE下载VisualFreeBasic(软件介绍) http://wwx.yfvb.com/soft-48.htm

Case WM_COMMAND

Dim As Long IDC =LoWord(wParam) ,CODE = HiWord(wParam)

为什么可以从wParam取出IDC和CODE=BN_CLICKED消息

在Windows消息处理过程中,wParam参数是一个32位的值,其中包含了消息的附加信息。对于WM_COMMAND消息,wParam的低16位(LoWord)存储了控件的标识符(IDC),高16位(HiWord)存储了控件发送的消息代码(CODE)。

在BN_CLICKED消息中,wParam的低16位存储了按钮控件的标识符(IDC),高16位存储了按钮控件发送的消息代码(CODE)。因此,通过使用LoWord和HiWord函数,可以从wParam中提取出IDC和CODE的值。

LoWord函数用于提取wParam的低16位,返回一个无符号整数(WORD)值。HiWord函数用于提取wParam的高16位,返回一个有符号整数(SHORT)值。

所以,通过使用LoWord(wParam)和HiWord(wParam)可以从wParam中取出IDC和CODE的值。

==============================================

如果是多个窗口,也有不同的IDC区分吗?还是按照句柄?

在多个窗口的情况下,每个窗口都有自己的句柄(handle),用于唯一标识该窗口。句柄是一个整数值,可以通过调用CreateWindow或CreateWindowEx函数来创建窗口时获得。

在WM_COMMAND消息中,wParam参数的低16位(LoWord)存储了控件的标识符(IDC),用于区分不同的控件。这个标识符是在创建控件时通过指定ID参数来设置的,可以是一个整数值或者是一个预定义的常量。

因此,通过wParam的低16位的IDC值,可以区分不同的控件。而句柄则用于区分不同的窗口。在处理WM_COMMAND消息时,可以根据wParam的IDC值和句柄来确定是哪个窗口的哪个控件发送了该消息,从而进行相应的处理。========================================

vbscript 复制代码
Type Form1_Class_Form Extends Class_Form
    Command3(3) As Class_Button
    Command1(2) As Class_Button
    Declare Function Show(hWndParent***
end type    
创建控件数组,绑定到同一个事件过程。

This.Command1(2).hWnd = pWindow->AddControl("BUTTON", hWnd, 103
绑定事件:Cast(Any Ptr, @Form1_CODEPROCEDURE)
 fp->Index = 2
 
This.Command1(1).hWnd = pWindow->AddControl("BUTTON", hWnd, 104
绑定事件:Cast(Any Ptr, @Form1_CODEPROCEDURE)
 fp->Index = 1
vbnet 复制代码
Function Form1_FORMPROCEDURE(ByVal hWndForm As hWnd, ByVal wMsg As UInteger, ByVal wParam As wParam, ByVal lParam As lParam) As LResult 'Form1 窗口回调过程
   Dim tLResult As LResult
      Select Case wMsg
      
    Case WM_COMMAND
    
     
       Dim As Long IDC =LoWord(wParam) ,CODE = HiWord(wParam)
        If CODE = BN_CLICKED Then
      select case IDC
            CASE 103
            FORM1_COMMAND1_BN_CLICKED(2,hWndForm, Cast(HWND, lParam))  
            CASE 104
            FORM1_COMMAND1_BN_CLICKED(1,hWndForm, Cast(HWND, lParam))  
      END SELECT
       end if
     END SELECT 'WM_COMMAND
相关推荐
海市公约4 小时前
HTML网页开发从入门到精通:从标签到表单的完整指南
前端·ide·vscode·程序人生·架构·前端框架·html
weixin_4046793117 小时前
vscode内存过大
ide·vscode·编辑器
sulikey18 小时前
如何使用 Visual Studio 代替 OllyDbg 完成汇编语言实验
汇编·ide·debug·visual studio·ollydbg
七元权18 小时前
VSCode连接远程容器失败(Missing GLIBC >=2.28!)
ide·vscode·编辑器·连接容器
信奥胡老师1 天前
苹果电脑(mac系统)安装vscode与配置c++环境,并可以使用万能头文件全流程
c++·ide·vscode·macos·编辑器
妖灵翎幺1 天前
C++ 中的 :: 操作符详解(一切情况)
开发语言·c++·ide
奔跑吧 android1 天前
【vscode】【远程 ssh 开发】【环境搭建】
ide·vscode·ssh
森明帮大于黑虎帮1 天前
Visual Studio 2008 自述文件
ide·visual studio
欧恩意1 天前
【Visual Studio】调试时 memcpy 拷贝错误,擅自修改内存
ide·visual studio
vortex51 天前
Visual Studio 编译选项详解
ide·visual studio