用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心编程技巧VisualBasic

如何使窗体最小化并消失

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-03-16 19:48:20
如何做到当我们单击窗体的最小化和关闭按钮时,窗体先最小化到任务栏成为按钮,然后消失呢?金山词霸能做到,我们也可以做到。

只要我们能截获这两个事件发送给窗体的消息,然后换成我们自定义的过程,问题就解决了。首先,用CloseWindow使窗体最小化;然后,用Form1.Visible = False使窗体消失。

这两个事件共用一个消息:WM_SYSCOMMAND,不同的是传递给窗口函数的wp参数。为取得这两个事件的wp参数,有两个方法

1、用vb的常数,这是一些以SC_为前缀的常数(S代表SYS,C代表COMMAND)

2、编程取得它们,事实上,我采用的是这种方法。在窗口放两个文本框,当任何WM_SYSCOMMAND消息发生时,先在文本框里显示wp和lp的值,很容易的发现,单击最小化按钮时,wp=61472;单击关闭按钮时,wp=61536。现在就可以开始编程了。

为了实现对窗体的子类处理,采用MsgHook32控件。

源代码如下:

Option Explicit

'' API函数声明
Private Declare Function CloseWindow Lib "user32" (ByVal hwnd As Long) As Long

'' 常数声明
Private Const WM_SYSCOMMAND = &H112

Private Sub Form_Load()
Msghook1.HwndHook = Form1.hwnd
'' 将Msghook1绑定到Form1上
Msghook1.Message(WM_SYSCOMMAND) = True
'' Msghook1拦截WM_SYSCOMMAND消息
End Sub

Private Sub Msghook1_Message(ByVal msg As Long, ByVal wp As Long, ByVal lp As Long, result As Long)
Text1.Text = wp
Text2.Text = lp
If wp = 61472 Or wp = 61536 Then
'' 单击的是最小化或关闭按钮
CloseWindow Form1.hwnd
'' 最小化窗口
Form1.Visible = False
'' 使窗口消失
Unload Form1
'' 卸载窗口。如果有通知栏图标,就不用卸载窗口
Else
Call Msghook1.InvokeWindowProc(msg, wp, lp)
'' 其他的事件由默认窗口函数处理
End If
End Sub

不仅是单击窗口右上角的按钮,其实,在系统菜单里选择最小化和关闭菜单项,也有同样的效果。

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:3,125.00000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号