请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

共享社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: 活动 交友 discuz
查看: 780|回复: 1

[分享] 最大最小化窗口

[复制链接]

8

主题

9

帖子

15

积分

班长

Rank: 1

威望
0
金钱
37
贡献
0
发表于 2015-12-15 11:27:46 | 显示全部楼层 |阅读模式
今天找到了最大、最小化窗口,很好,为以后的菜鸟们分享一下。不要感谢我,我的名字叫雷锋
http://blog.sina.com.cn/s/blog_60ba16ed01014nam.html
不少朋友偏爱用VBA开发应用程序来解决日常办公中遇到的问题,可大家会发现在VBE编辑器中插入的窗体(默认为UserForm1)标题栏中只有“关闭”按钮而没有“最小化”和“最大化/还原”按钮(如图1)。网上也有朋友在解答这一问题时采用的是变通的方法,即在设计程序界面时通过设置窗体的属性隐去了窗体的标题栏,然后利用工具绘制出虚拟的标题栏,最后对“标题栏”中相应的“按钮对象”进行编程,这当然也是可以的,但无疑增加程序开发的难度同时也影响了程序界面的美观。其实利用API,我们可以方便地给这些窗体的标题栏加上最大化/还原和最小化按钮。

实现的方法是:在插入的用户窗体中双击鼠标,打开窗体的代码窗口,删除其中的默认事件(UserForm_Click()事件)代码,然后输入下面的API系统调用程序:
Option Explicit
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) 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 GWL_STYLE = (-16)
Private Const WS_THICKFRAME As Long = &H40000 '(恢复大小)
Private Const WS_MINIMIZEBOX As Long = &H20000 '(最小化)
Private Const WS_MAXIMIZEBOX As Long = &H10000 '(最大化)         

'窗体UserForm的初始化
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_THICKFRAME '还原
IStyle = IStyle Or WS_MINIMIZEBOX '最小化
IStyle = IStyle Or WS_MAXIMIZEBOX '最大化
SetWindowLong hWndForm, GWL_STYLE, IStyle
End Sub
完成后运行用户窗体就可以观察到如图2所示的效果了。






回复

使用道具 举报

39

主题

125

帖子

142

积分

排长

Rank: 2

威望
0
金钱
253
贡献
0
发表于 2015-12-20 09:12:37 | 显示全部楼层
大赞
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|共享社区 ( 京ICP备15025663号-2  

GMT+8, 2018-12-11 07:58 , Processed in 0.162122 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表