VB最小化编程.docx_第1页
VB最小化编程.docx_第2页
VB最小化编程.docx_第3页
VB最小化编程.docx_第4页
VB最小化编程.docx_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

要实现窗口最小化必须满足以下条件: 1:按下最小化按钮,窗体不可见 2:最小化后,最小化窗体的图标必须出现在任务栏的通知区域中 3:当双击通知区域中的图标时,窗体又显示出来,同时通知区域中的图标消失. 要满足上面的条件: 1:首先屏蔽窗体中系统自带的最小化图标,即Form.MinButton=False 2:声明1个API函数: PublicDeclareFunctionShell_NotifyIconLibshell32.dllAliasShell_NotifyIconA(ByValdwMessageAsLong,lpDataAsNOTIFYICONDATA)AsLong 注意:上面这个API函数在XP中没有别名,将别名去掉后为: PublicDeclareFunctionShell_NotifyIconLibshell32.dll(ByValdwMessageAsLong,lpDataAsNOTIFYICONDATA)AsLong 3:声明7个常数: PublicConstNIM_ADD=&H0 PublicConstNIM_DELETE=&H2 PublicConstNIF_ICON=&H2 PublicConstNIF_MESSAGE=&H1 PublicConstNIF_TIP=&H4 PublicConstWM_MOUSEMOVE=&H200 PublicConstWM_LBUTTONDBLCLK=&H203 4:定义1个NOTIFYICONDATA类型 PublicTypeNOTIFYICONDATA cbSizeasLong hWndasLong uIdasLong uFlagsasLong uCallBackMessageasLong hIconasLong szTipasString EndType 5:声明一个nid的类型 PublicnidasNOTIFYICONDATA 思路清晰后,开始编写代码 1:在窗体中画1个Command,它的Caption属性为:最小化 2:将窗体Form的MinButton的属性设为:False 3:在窗体中添加1个模块,模块中的代码为: PublicDeclareFunctionShell_NotifyIconLibshell32.dll(ByValdwMessageAsLong,lpDataAsNOTIFYICONDATA)AsLong PublicConstNIM_ADD=&H0 PublicConstNIM_DELETE=&H2 PublicConstNIF_ICON=&H2 PublicConstNIF_MESSAGE=&H1 PublicConstNIF_TIP=&H4 PublicConstWM_MOUSEMOVE=&H200 PublicConstWM_LBUTTONDBLCLK=&H203 PublicTypeNOTIFYICONDATA cbSizeasLong hWndasLong uIdasLong uFlagsasLong uCallBackMessageasLong hIconasLong szTipasString EndType PublicnidasNOTIFYICONDATA 4:编写Command的单击事件: PrivateSubCommand1_Click() nid.cbSize=Len(nid) nid.uId=vbNull nid.hWnd=Me.hWnd nid.uFlags=NIF_TIPOrNIF_MESSAGEOrNIF_ICON nid.uCallBackMessage=WM_MOUSEMOVE nid.hIcon=Me.Icon nid.szTip=窗体最小化 Shell_NotifyIconNIM_ADD,nid Me.Hide EndSub 5:编写窗体的MouseMove事件: PrivateSubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle) DimmsgAsLong msg=X/15 Ifmsg=WM_LBUTTONDBLCLKThen Me.Show Shell_NotifyIconNIM_DELETE,nid EndIf EndSub 按F5启动,单击Command,看看通知区域中是不是多了个窗体的图标?双击该图标,窗体又显示出来了! 一、Shell_NotifyIcon 函数说明此函数用来向任务栏托盘区域发送消息1、函数格式BOOL Shell_NotifyIcon( DWORD dwMessage,PNOTIFYICONDATA lpdata);2、参数说明:dwMessage为输入参数,传递发送的消息,表明要执行的操作。可选的值如下:NIM_ADD向托盘区域添加一个图标。此时第二个参数lpdata指向的NOTIFYICONDATA结构体中的hWnd和uID成员用来标示这个图标,以便以后再次使用Shell_NotifyIcon对此图标操作。NIM_DELETE删除托盘区域的一个图标。此时第二个参数lpdata指向的NOTIFYICONDATA结构体中的hWnd和uID成员用来标示需要被删除的这个图标。NIM_MODIFY修改托盘区域的一个图标。此时第二个参数lpdata指向的NOTIFYICONDATA结构体中的hWnd和uID成员用来标示需要被修改的这个图标。NIM_SETFOCUSVersion 5.0. 设置焦点。比如当用户操作托盘图标弹出菜单,而有按下ESC键将菜单消除后,程序应该使用此消息来将焦点设置到托盘图标上。NIM_SETVERSIONVersion 5.0. 设置任务栏按照第二个参数lpdata指向的NOTIFYICONDATA结构体中的uVersion成员指定的版本号来工作。此消息可以允许用户设置是否使用基于Windows2000的version 5.0的风格。uVersion的缺省值为0,默认指明了使用原始Windows 95图标消息风格。具体这两者的区别请参考msdn中的Shell_NotifyIcon函数说明的Remarks。lpdata为输入参数,是指向NOTIFYICONDATA结构体的指针,结构体内容用来配合第一个参数wMessage进行图标操作。3、返回值如果图标操作成功返回TRUE,否则返回FALSE。如果dwMessage参数设为NIM_SETVERSION,则如果版本设置成功返回TRUE,如果设置的版本不支持返回FALSE。 编辑本段二、NOTIFYICONDATA 结构体说明包含系统需要的用来传递托盘区域消息的信息。1、格式typedef struct _NOTIFYICONDATA DWORD cbSize;HWND hWnd;UINT uID;UINT uFlags;UINT uCallbackMessage;HICON hIcon;TCHAR szTip64;DWORD dwState;DWORD dwStateMask;TCHAR szInfo256;union UINT uTimeout;UINT uVersion;TCHAR szInfoTitle64;DWORD dwInfoFlags;GUID guidItem; NOTIFYICONDATA, *PNOTIFYICONDATA;2、成员说明:cbSize结构体的大小,以字节为单位。hWnd窗口的句柄。标示的窗口用来接收与托盘图标相关的消息。Shell_NotifyIcon函数调用时,hWnd和uID成员用来标示具体要操作的图标。uID应用程序定义的任务栏图标的标识符。Shell_NotifyIcon函数调用时,hWnd和uID成员用来标示具体要操作的图标。通过将多次调用,你可以使用不同的uID将多个图标关联到一个窗口hWnd。uFlags此成员表明具体哪些其他成员为合法数据(即哪些成员起作用)。此成员可以为以下值的组合:NIF_ICONhIcon成员起作用。NIF_MESSAGEuCallbackMessage成员起作用。NIF_TIPszTip成员起作用。NIF_STATEdwState和dwStateMask成员起作用。NIF_INFO使用气球提示代替普通的工具提示框。szInfo, uTimeout, szInfoTitle和dwInfoFlags成员起作用。NIF_GUID保留。uCallbackMessage应用程序定义的消息标示。当托盘图标区域发生鼠标事件或者使用键盘选择或激活图标时,系统将使用此标示向由hWnd成员标示的窗口发送消息。消息响应函数的wParam参数标示了消息事件发生的任务栏图标,lParam参数根据事件的不同,包含了鼠标或键盘的具体消息,例如当鼠标指针移过托盘图标时,lParam将为WM_MOUSEMOVE。hIcon增加、修改或删除的图标的句柄。注意,windows不同版本对于图标有不同要求。Windows XP可支持32位。szTip指向一个以0结束的字符串的指针。字符串的内容为标准工具提示的信息。包含最后的0字符,szTip最多含有64个字符。对于Version 5.0 和以后版本,szTip最多含有128个字符(包含最后的0字符)。dwStateVersion 5.0,图标的状态,有两个可选值,如下:NIS_HIDDEN图标隐藏NIS_SHAREDICON图标共享dwStateMaskVersion 5.0. 指明dwState成员的那些位可以被设置或者访问。比如设置此成员为NIS_HIDDEN,将导致只有hidden状态可以被获取。szInfoVersion 5.0. 指向一个以0结束的字符串的指针。字符串的内容为气球提示内容。最多含有255个字符。如果要移除已经存在的气球提示信息,设置uFlags成员为NIF_INFO,同时将szInfo设为空。uTimeout和uVersion成员为联合体。uTimeout表示气球提示超时的时间,单位为毫秒,此时间后气球提示将消失。系统默认气球提示的超时时间最小值为10秒,最大值为30秒。如果设置的uTimeout的值小于10将设置最小值,如果大于30将设置最大值。将超时时间分为最大最小两种,是因为解决不同图标的气球提示同时弹出的问题,详细内容请参考MSDN中NOTIFYICONDATA结构体说明的remarks。uVersionVersion 5.0. 和uTimeout成员为联合体。用来设置使用Windows 95 还是 Windows 2000风格的图标消息接口。请参考Shell_NotifyIcon函数的说明获取更多信息。只有当使用Shell_NotifyIcon函数发送NIM_SETVERSION消息时,此成员才有作用。可选的值如下:0使用Windows 95风格。针对Windows 2000版本之前的windows设计的软件请使用此值。NOTIFYICON_VERSION使用Windows 2000风格。 针对Windows 2000版本以及以后版本的windows设计的软件请使用此值。szInfoTitleVersion 5.0. 指向一个以0结束的字符串的指针。字符串的内容为气球提示的标题。此标题出现在气球提示框的上部,最多含有63个字符。dwInfoFlagsVersion 5.0. 设置此成员用来给气球提示框增加一个图标。增加的图标出现在气球提示标题的左侧,注意如果szInfoTitle成员设为空字符串,则图标也不会显示。可选值如下:NIIF_ERROR错误图标。NIIF_INFO信息图标。NIIF_NONE没有图标。NIIF_USER使用用户使用hIcon成员指明的图标,要求Windows XP Service Pack 2 (SP2)或以后系统。NIIF_WARNING警告图标。NIIF_ICON_MASKVersion 6.0. 保留。NIIF_NOSOUNDVersion 6.0. 禁止播放相应声音。guidItemVersion 6.0. 保留。Download the full source+pictures+. At /SiliconValley/Campus/3636/trayicon.zip Private Type NOTIFYICONDATA cbSize As Long hWnd As Long uId As Long uFlags As Long ucallbackMessage As Long hIcon As Long szTip As String * 64 End Type Private Const NIM_ADD = &H0 Private Const NIM_MODIFY = &H1 Private Const NIM_DELETE = &H2 Private Const NIF_MESSAGE = &H1 Private Const NIF_ICON = &H2 Private Const NIF_TIP = &H4 Private Const WM_LBUTTONDBLCLK = &H203 Private Const WM_LBUTTONDOWN = &H201 Private Const WM_RBUTTONUP = &H205 Private Declare Function Shell_NotifyIcon Lib shell32 Alias Shell_NotifyIconA (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean Dim TrayI As NOTIFYICONDATA Private Sub Form_Load() TrayI.cbSize = Len(TrayI) Set the windows handle (this will be used to hook the specified window) TrayI.hWnd = pichook.hWnd Application-defined identifier of the taskbar icon TrayI.uId = 1& Set the flags TrayI.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE Set the callback message TrayI.ucallbackMessage = WM_LBUTTONDOWN Set the picture (must be an icon!) TrayI.hIcon = imgIcon(2).Picture Set the tooltiptext TrayI.szTip = Recent & Chr$(0) Create the icon Shell_NotifyIcon NIM_ADD, TrayI Me.Hide End Sub Private Sub Form_Unload(Cancel As Integer) remove the icon TrayI.cbSize = Len(TrayI) TrayI.hWnd = pichook.hWnd TrayI.uId = 1& Shell_NotifyIcon NIM_DELETE, TrayI End End Sub Private Sub mnuPop_Click(Index As Integer) Select Case Index Case 0 MsgBox KPD-Team 1998 + Chr$(13) + URL: / + Chr$(13) + E-Mail: KPDTeamA, vbInformation + vbOKOnly Case 2 Unload Me End Select End Sub Private Sub pichook_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Msg = X / Screen.TwipsPerPixelX If Msg = WM_LBUTTONDBLCLK Then Left button double click mnuPop_Click 0 ElseIf Msg = WM_RBUTTONUP Then Right button click Me.PopupMenu mnuPopUp End If End Sub Private Sub Timer1_Timer() Static Tek As Integer Animate the icon Me.Icon = imgIcon(Tek).Picture TrayI.hIcon = imgIcon(Tek).Picture Tek = Tek + 1 If Tek = 3 Then Tek = 0 Shell_NotifyIcon NIM_MODIFY, TrayI End SubVB托盘程序详解2007年05月03日 星期四 下午 02:57很多软件运行时会在系统托盘区(就是桌面右下角显示时间的区域)出现一个小图标,它作为程序运行的一个标志,我们可以通过使用小图标所弹出的菜单来控制应用程序的状态。本例就给出了一个功能比较完整的托盘程序,我们可以看到怎样用API函数Shell_NotifyIcon来添加、删除、更改托盘图标;而且例中还演示了为托盘图标添加右键菜单和浮动提示的方法。 程序(附后)用到了Shell_NotifyIcon、SendMessage、CallWindowProc、SetWindowLong等API函数,其中Shell_NotifyIcon是主要的函数,它用来添加、删除、更改系统托盘区(taskbar status area)的图标,所以我们先来看看这个函数的声明和参数:使用API函数之前必须先在程序中声明如下:Declare Function Shell_NotifyIcon Lib shell32.dll Alias Shell_NotifyIconA (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long 其中各参数的意义如下表: 参数: 意义dwMessage 为消息设置值,它可以是以下的几个常数值:0、1、2 NIM_ADD = 0加入图标到系统状态栏中NIM_MODIFY = 1 修改系统状态栏中的图标NIM_DELETE = 2 删除系统状态栏中的图标LpData 用以传入NOTIFYICONDATA数据结构变量,其结构如下所示:Type NOTIFYICONDATAcbSize As Long 需填入NOTIFYICONDATA数据结构的长度HWnd As Long 设置成窗口的句柄Uid As Long为图标所设置的ID值UFlags As Long 设置uCallbackMessage,hIcon,szTip是否有效UCallbackMessage As Long消息编号HIcon As Long 显示在状态栏上的图标SzTip As String * 64提示信息End Type 返回值Long,非零表示成功,零表示失败在使用这个API函数之前我们应该先定义结构类型NOTIFYICONDATA:Public Type NOTIFYICONDATA cbSize As Long HWnd As Long Uid As Long UFlags As Long UCallbackMessage As Long HIcon As Long SzTip As String * 64End Type 然后定义一个NOTIFYICONDATA的变量TheData来记录设置托盘图标的数据Private TheData As NOTIFYICONDATA 这时我们就可以使用这个函数来设置系统托盘图标了,具体方法如下:1、添加图标With TheData .Uid = 0.HWnd = frm.HWndfrm.HWnd是程序主窗体的句柄.cbSize = Len(TheData).HIcon = frm.Icon.Handlefrm.Icon.Handle指向主窗体的图标.UFlags = NIF_ICON.UCallbackMessage = TRAY_CALLBACK 作用是允许返回消息,在下一节中会有详细解释。.UFlags = .UFlags Or NIF_MESSAGEEnd WithShell_NotifyIcon NIM_ADD, TheData 根据前面定义NIM_ADD,设置为“添加模式”,然后添加2、删去图标With TheData.UFlags = 0End With Shell_NotifyIcon NIM_DELETE, TheData根据前面定义NIM_DELETE,设置为“删除模式”3、更改图标With TheData .HIcon = pic.Handle pic是图片狂PictureBox,存放图标文件.UFlags = NIF_ICONEnd With Shell_NotifyIcon NIM_MODIFY, TheData根据前面定义NIM_MODIFY,设置为“更改模式”4、为图标添加浮动提示信息With TheData .SzTip = tip & vbNullChartip是字符串string,存储提示信息.UFlags = NIF_TIP 指明要对浮动提示进行设置End With Shell_NotifyIcon NIM_MODIFY, TheData根据前面定义NIM_MODIFY,设置为“修改模式”通过以上几段代码我们就能根据自己需要添加、删除、更改系统托盘图标,并能添加系统图标上的浮动提示信息。但这时的托盘图标是孤立的,我们并不能利用它来控制应用程序的行为,怎么办呢?别急,请往下看如果你下载(源程序下载)并运行这个例程序,你会发现如果我们在托盘图标上点击鼠标右键,则会弹出一个右键菜单。如果点击相应的菜单项,程序主窗体会随之变化,这样就可以控制程序的行为。而如果当主窗体处于最小化状态时,我们在托盘图标上点击左键,窗体会恢复到原来的大小。其实实现上述的功能都要依赖于WINDOWS操作系统的消息机制,要完全弄懂这个机制挺不容易的,但是我们可以按下述文字来理解它。把WINDOWS操作系统看作人的大脑,它接收、处理、并发送各种各样的信息给我们的各个器官(当然是比喻各个应用程序了),也就是说它是消息的中枢。而每个应用程序(甚至每一个按钮、标签、窗体等等统称为窗口)在运行时都会被分配一个窗口过程WINDOWPROC,由这个窗口过程来接收和处理操作系统发来的消息(实际上存在一个消息队列),通常情况下这个窗口过程是由操作系统指定的,它会自动的响应并处理一些WINDOWS消息(如窗体移动、最大化、最小化、错误信息等)。好,到这我们先停一下,提出一个疑问,这些消息能否由我们自己写程序来处理呢?答案是肯定的,不过还得借助API函数的威力了,怎么用?我们还是先看看这些API函数的定义和参数吧。 程序中用到了SendMessage、CallWindowProc、SetWindowLong等API函数,其中SendMessage函数的作用是将一条消息发给某个窗口;CallWindowProc函数用来发送消息到一个窗口过程;而使用SetWindowLong函数来为窗口结构中为指定的窗口设置属性。使用API函数之前必须先在程序中声明如下:Declare Function CallWindowProc Lib user32 Alias CallWindowProcA (ByVal lpPrevWndFunc As Long, ByVal HWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongDeclare Function SetWindowLong Lib user32 Alias SetWindowLongA (ByVal HWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function SendMessage Lib user32 Alias SendMessageA (ByVal HWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long 其中各参数的意义如下表: CallWindowProc函数参数意义lpPrevWndFunc Long,原来的窗口过程地址HWnd Long,窗口句柄Msg Long,发送的消息wParam Long,消息类型,参考wParam参数表lParam Long,依据wParam参数的不同而不同返回值Long,依据发送的消息不同而变化SetWindowLong函数: 参数意义hwnd Long,欲为其取得信息的窗口的句柄nIndex Long,请参考GetWindowLong函数的nIndex参数的说明dwNewLong Long,由nIndex指定的窗口信息的新值返回值Long,指定数据的前一个值SendMessage函数: 参数意义hwnd Long,要接收消息的那个窗口的句柄wMsg Long,消息的标识符wParam Long,具体取决于消息lParam Any,具体取决于消息返回值Long,由具体的消息决定我们要自己写程序来处理消息,必须先更改窗口的属性,从原来由默认的窗口过程来处理消息变成由我们自己写的消息处理过程来处理消息。方法是使用SetWindowLong函数来取得默认窗口过程的地址,然后转向为我们自己写的窗口过程的地址,具体的实现方法如下代码:GWL_WNDPROC获得该窗口的窗口过程的地址,AddressOf是取址函数,NewWindowProc是我们写的过程OldWindowProc = SetWindowLong(frm.HWnd, GWL_WNDPROC, AddressOf NewWindowProc) 然后在NewWindowProc函数中写入如下代码,需要注意的是下面代码中红色的TRAY_CALLBACK是由托盘区图标传来的消息,要让托盘图标传回消息,必须在添加托盘图标时指定:Public Function NewWindowProc(ByVal HWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long 如果用户点击了托盘中的图标,则进行判断是点击了左键还是右键If Msg = TRAY_CALLBACK Then 如果点击了左键If lParam = WM_LBUTTONUP Then而这时窗体的状态是最小化时If TheForm.WindowState = vbMinimized Then _ 恢复到最小化前的窗体状态TheForm.WindowState = TheForm.LastState TheForm.SetFocusExit FunctionEnd If End If 如果点击了右键If lParam = WM_RBUTTONUP Then 则弹出右键菜单TheForm.PopupMenu TheMenu Exit Function End If End If 如果是其他类型的消息则传递给原有默认的窗口函数NewWindowProc = CallWindowProc(OldWindowProc, HWnd, Msg, wParam, lParam) End Function 这样我们就取得并处理了来自托盘图标的消息,现在的问题是在鼠标右键菜单弹出后,怎么控制程序主窗体的状态,这时我们需要用到SendMessage函数来向主窗体发送最大化、最小化、关闭、移动等消息,具体的代码实现如下,其中HWnd是主窗体的句柄,WM_SYSCOMMAND表示发送的是系统控制类的消息,SC_MOVE、SC_SIZE、SC_RESTORE便是要发送的消息了:托盘图标右键菜单上的“移动”项被点击时Private Sub mnuTrayMove_Click() SendMessage HWnd, WM_SYSCOMMAND, SC_MOVE, 0& End Sub 托盘图标右键菜单上的“恢复”项被点击时Private Sub mnuTrayRestore_Click() SendMessage HWnd, WM_SYSCOMMAND, SC_RESTORE, 0& End Sub 托盘图标右键菜单上的“退出”项被点击时Private Sub mnuTraySize_Click() SendMessage HWnd, WM_SYSCOMMAND, SC_SIZE, 0& End Sub 最后要提醒你,在程序退出时一定要把窗口过程的地址恢复为默认值,同时把托盘图标移去哦。为了学习方便,以下提供了源代码:- 使用系统托盘程序演示-程序说明: 这是一个比较完整的使用系统托盘的程序实例,包括了:添加托盘图标,删除托盘图标,动态改变托盘图标,为托盘图标添加浮动提示信息,实现托盘图标的鼠标右键菜单等内容。-名称-作用- Form1 主窗体 mnuFile,mnuFileExit 文件菜单,菜单项 mnuTray,mnuTrayClose. 托盘区右键菜单,菜单项-Option ExplicitLastState变量的作用是标示主窗体原有状态Public LastState As Integer【VB声明】 Private Declare Function SendMessage Lib user32 Alias SendMessageA (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long【说明】 调用一个窗口的窗口函数,将一条消息发给那个窗口。除非消息处理完毕,否则该函数不会返回。SendMessageBynum, SendMessageByString是该函数的“类型安全”声明形式【返回值】 Long,由具体的消息决定【参数表】 hwnd - Long,要接收消息的那个窗口的句柄 wMsg - Long,消息的标识符 wParam - Long,具体取决于消息 lParam - Any,具体取决于消息Private Declare Function SendMessage Lib user32 Alias SendMessageA (ByVal HWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long表示发送的是系统命令Private Const WM_SYSCOMMAND = &H112Private Const SC_MOVE = &HF010&Private Const SC_RESTORE = &HF120&Private Const SC_SIZE = &HF000&当主窗体加载时Private Sub Form_Load()窗体的WindowState属性,返回或设置一个值,该值用来指定在运行时窗体窗口的可视状态vbNormal 0 (缺省值)正常。VbMinimized 1 最小化(最小化为一个图标)VbMaximized 2 最大化(扩大到最大尺寸)If WindowState = vbMinimized ThenLastState = vbNormalElseLastState = WindowStateEnd If将图标添加到托盘的函数,参见模块中的解释注意了这是从主程序到模块的入口,本例中并没有直接调用Shell_NotifyIcon函数AddToTray Me, mnuTraySetTrayTip 托盘图标演示,点击右键弹出菜单End Sub在主窗体Form1大小改变时,相应改变右键菜单mnuTray的菜单项的可用属性EnabledPrivate Sub Form_Resize()Select Case WindowState如果窗体最小化了,把菜单项“最大化”“恢复”设为可用,而把“最小化”“移动”“大小”三项设为不可用.如果这时在托盘图标上点击鼠标右键,会发现不可用项变为灰色Case vbMinimizedmnuTrayMaximize.Enabled = TruemnuTrayMinimize.Enabled = FalsemnuTrayMove.Enabled = FalsemnuTrayRestore.Enabled = TruemnuTraySize.Enabled = False窗体最大化时Case vbMaximizedmnuTrayMaximize.Enabled = FalsemnuTrayMinimize.Enabled = TruemnuTrayMove.Enabled = FalsemnuTrayRestore.Enabled = TruemnuTraySize.Enabled = False一般状态下Case vbNormalmnuTrayMaximize.Enabled = TruemnuTrayMinimize.Enabled = TruemnuTrayMove.Enabled = TruemnuTrayRestore.Enabled = FalsemnuTraySize.Enabled = TrueEnd SelectIf WindowState vbMinimized Then LastState = WindowStateEnd Sub保证在程序退出时删除托盘图标Private Sub Form_Unload(Cancel As Integer)RemoveFromTrayEnd Sub“文件”菜单的“退出”项被点击时Private Sub mnuFileExit_Click()Unload MeEnd Sub托盘图标右键菜单上的“退出”项被点击时Private Sub mnuTrayClose_Click()Unload MeEnd Sub托盘图标右键菜单上的“最大化”项被点击时Private Sub mnuTrayMaximize_Click()WindowState = vbMaximizedEnd Sub托盘图标右键菜单上的“最小化”项被点击时Private Sub mnuTrayMinimize_Click()WindowState = vbMinimizedEnd Sub托盘图标右键菜单上的“移动”项被点击时Private Sub mnuTrayMove_Click()SendMessage HWnd, WM_SYSCOMMAND, _SC_MOVE, 0&End Sub托盘图标右键菜单上的“恢复”项被点击时Private Sub mnuTrayRestore_Click()SendMessage HWnd, WM_SYSCOMMAND, _SC_RESTORE, 0&End Sub托盘图标右键菜单上的“退出”项被点击时Private Sub mnuTraySize_Click()SendMessage HWnd, WM_SYSCOMMAND, _SC_SIZE, 0&End Sub-以下为模块中的代码:-Option ExplicitPublic OldWindowProc As LongPublic TheForm As FormPublic TheMenu As Menu【V

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论