⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 documents3_1.htm

📁 api函数介绍
💻 HTM
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<style><!--
body,table {font-family:"宋体"; font-size: 9pt; line-height:11pt;}
a {text-decoration:none} a:hover {color:red;text-decoration:underline}
--></style>
<title>金山词霸启示录——定制系统菜单</title>
</head>

<body link="#FF0000" vlink="#FF0000" alink="#FF0000" bgcolor="#FFC8C8">

<table border="0" width="100%" cellspacing="4" cellpadding="6">
  <tr>
    <td width="100%" bgcolor="#336699"><font color="#FFFFFF">金山词霸启示录——定制系统菜单</font></td>
  </tr>
</table>

<p>&nbsp;&nbsp;&nbsp; 
如何做到当我们单击窗体的最小化和关闭按钮时,窗体先最小化到任务栏成为按钮,然后消失呢?金山词霸能做到,我们也可以做到。</p>

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

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

<p>&nbsp;&nbsp;&nbsp; 1、用vb的常数,这是一些以SC_为前缀的常数(S代表SYS,C代表COMMAND)</p>

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

<p>&nbsp;&nbsp;&nbsp; 为了实现对窗体的子类处理,采用MsgHook32控件。</p>

<p>&nbsp;&nbsp;&nbsp; 源代码如下:</p>

<p><font color="#000080">&nbsp;&nbsp;&nbsp; Option Explicit<br>
</font><br>
<font color="#008000">&nbsp;&nbsp;&nbsp; ' API函数声明<br>
</font>&nbsp;&nbsp;&nbsp; <font color="#000080">Private Declare Function</font> 
CloseWindow <font color="#000080">Lib</font> &quot;user32&quot; (<font color="#000080">ByVal</font> 
hwnd <font color="#000080">As Long</font>) <font color="#000080">As Long</font><br>
<br>
<font color="#008000">&nbsp;&nbsp;&nbsp; ' 常数声明<br>
</font>&nbsp;&nbsp;&nbsp; <font color="#000080">Private Const</font> WM_SYSCOMMAND = 
&amp;H112<br>
<br>
&nbsp;&nbsp;&nbsp; <font color="#000080">Private Sub</font> Form_Load()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Msghook1.HwndHook = Form1.hwnd<br>
<font color="#008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 将Msghook1绑定到Form1上<br>
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Msghook1.Message(WM_SYSCOMMAND) = <font
color="#000080">True</font><br>
<font color="#008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' Msghook1拦截WM_SYSCOMMAND消息<br>
</font>&nbsp;&nbsp;&nbsp; <font color="#000080">End Sub</font><br>
<br>
&nbsp;&nbsp;&nbsp; <font color="#000080">Private Sub</font> Msghook1_Message(<font
color="#000080">ByVal</font> msg <font color="#000080">As Long</font>, <font
color="#000080">ByVal</font> wp <font color="#000080">As Long</font>, <font
color="#000080">ByVal</font> lp <font color="#000080">As Long</font>, result <font
color="#000080">As Long</font>)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Text1.Text = wp<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Text2.Text = lp<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#000080">If</font> wp = 61472 <font
color="#000080">Or</font> wp = 61536 <font color="#000080">Then</font><br>
<font color="#008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 
单击的是最小化或关闭按钮<br>
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CloseWindow 
Form1.hwnd<br>
<font color="#008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 
最小化窗口<br>
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Form1.Visible = <font
color="#000080">False</font><br>
<font color="#008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 
使窗口消失<br>
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Unload Form1<br>
<font color="#008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 
卸载窗口。如果有通知栏图标,就不用卸载窗口<br>
</font><font color="#000080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br>
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font
color="#000080">Call</font> Msghook1.InvokeWindowProc(msg, wp, lp)<br>
<font color="#008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 
其他的事件由默认窗口函数处理<br>
</font><font color="#000080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br>
&nbsp;&nbsp;&nbsp; End Sub</font></p>

<p>&nbsp;&nbsp;&nbsp; 
不仅是单击窗口右上角的按钮,其实,在系统菜单里选择最小化和关闭菜单项,也有同样的效果。到此,对金山词霸的一个小秘密就发觉出来了,接下来,就看看<a
href="Documents3_2.htm">如何实现通知栏图标</a>吧。</p>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -