摘要:大家好,我们今日继续讲解VBA代码解决方案的第102讲内容:如何在用户窗体上添加最大、最小化按钮。窗体初始化时使用API函数在标题栏上添加最大最小化按钮。

大家好,我们今日继续讲解VBA代码解决方案的第102讲内容:如何在用户窗体上添加最大、最小化按钮。我们在使用VBA的窗体时,不知你是否注意到:VBA中的窗体标题栏上只有关闭按纽,没有最大最小化按钮的。如下图。

VBA代码将强制执行:你的窗体上必须显示最大、最小化按钮

那么是否可以利用代码让窗口上也出现类似于EXCEL和WORD窗口的最大和最小化按钮呢?这时就要利用API函数了,利用API函数在窗体的标题栏上添加最大最小化按钮,是非常可行的。

如下面的代码所示。

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Const WS_MAXIMIZEBOX = &H10000

Private Const WS_MINIMIZEBOX = &H20000

Private Const GWL_STYLE = (-16)

Private Sub UserForm_Initialize() '注意是在此事件下的加载

Dim hWndForm As Long

Dim iStyle As Long

hWndForm = FindWindow("ThunderDFrame", Me.Caption)

iStyle = GetWindowLong(hWndForm, GWL_STYLE)

iStyle = iStyle Or WS_MINIMIZEBOX

iStyle = iStyle Or WS_MAXIMIZEBOX

SetWindowLong hWndForm, GWL_STYLE, iStyle

End Sub

代码窗口:

VBA代码将强制执行:你的窗体上必须显示最大、最小化按钮

这里需要再给大家解释一下UserForm_Initialize事件,窗体的Initialize事件即初始化事件,任何窗体生命周期的第一个事件都是Initialize。只要在项目中使用了窗体的名称,在创建实际窗口及其控件之前,都会发生initialize事件。可以在initialize事件处理过程中正确地初始化窗体变量,它在Load事件之前发生。

代码解析:

窗体初始化时使用API函数在标题栏上添加最大最小化按钮。

第1行到第6行代码,API函数声明。

第10行代码,获取窗口句柄。

第11行到第14行代码,在标题栏上添加最大最小化按钮。

代码运行后:

VBA代码将强制执行:你的窗体上必须显示最大、最小化按钮

这时的最大最小化按钮就统统出现了。

今日内容回向:

1 如何实现窗口上出现最大最小化按钮呢?

2 API 函数需要调用,如何调用API 函数呢?

相关文章