VisualFreeBasic控件_Custom 自定义

2026-1-21 / 0 评论 / 50 阅读

此控件不是一个固定的控件,可以自由设置成已在系统中注册的任何控件

系统中注册的控件

设置类名,只要是系统内注册的类名,就变成相关控件

WIn操作系统内置控件的做法,就是类名。那些WIn系统的标准控件,每一个控件都拥有自己独一无二的类名,当你设置的类名与之对应,那这个控件就变成此控件了。
当然,这里并不是为了WIn系统里标准控件搞的这样的万能控件,而是为了第三方提供的控件使用。

第三方提供WIn系统标准控件,会向系统注册一个控件类名。我们设置此类名,那么这个控件就成为第三方控件了。

第三方控件,比方:火花编辑器。当你下载火花编辑器后,有一个DLL文件。
在VFB中,入口函数中加载这个DLL,然后这个控件类名设置成火花编辑器的类名(具体类名,就要看第三方控件的开发文档了),运行软件后,就有这个控件了。

当然不懂这些没关系,反正用不到。

比方
Button 按钮
Edit 文本框

用窗口做控件(用户控件)

先在工程中添加一个窗口,比如:Form2
设置该窗口为子窗口

再在本控件的子窗口中输入:Form2

至此,Form2 就成为控件了。
也可以作为真实容器控件使用。

用户控件,控件变量

VFB中没有模块变量,就是单独属于控件自己的变量,就算系统控件也没有。所有变量都是共享的,比方,一个窗口中有多个相同控件存在,其变量是共享的,而非私有的。
实现私有控件变量,需要用以下代码:

Dim fp As FormControlsPro_TYPE Ptr = vfb_Get_Control_Ptr(hWndControl)
If fp Then
   fp->CtlData(0 - 99)  '100个变量,供开发控件中,控件内部使用
   fp->UserData(0 - 99) '100个变量,用户使用控件中使用。
End If

用户控件,控件事件

用户使用时,就一个事件,实现事件的方法,就是写控件者向自己发送消息

Function Form1_Custom1_SubClassProcess(hWndControl As hWnd, wMsg As UInteger, wParam As wParam, lParam As lParam) As LResult
   Select Case wMsg 
      Case  WM_USER+100 
       事件1
      Case  WM_USER+101 
        事件2 
   End Select 
   Function = CallWindowProc(GetPropW(hWndControl, "vfb_SubClassProcess") ,hWndControl ,wMsg ,wParam ,lParam) '给原处理地址处理消息 ,这是必须的,不然就吃掉消息。

End Function

写控件时,触发控件

SendMessage( hWndControl , WM_USER+100 , wParam , lParam ) 

用户控件,控件功能

用户需要修改或执行控件功能,也是发消息

SendMessage( hWndControl , WM_USER+200 , wParam , lParam ) 

控件窗口中,在自定义事件中

Function Form2_Custom(hWndForm As hWnd, wMsg As UInteger, wParam As wParam, lParam As lParam) As LResult
   Select Case wMsg 
      Case WM_USER+200
       功能或属性1   
      Case WM_USER+201   
       功能或属性2    
      Case WM_USER+202
       功能或属性3  
   End Select 
   Function = FALSE ' 若不想系统继续处理此消息,则应返回 TRUE (俗称吃掉消息)。

End Function

因为控件都是多开的,因此需要设置或执行本控件需要

Me.hWndForm = hWndForm
Me.xx控件xx.hWndForm = hWndForm

然后才可以操作自己,比如:

Me.Caption ="xxx"

评论一下?

OωO
取消