如何实现以下效果:
已知一个菜单程序AppA
点击其中一个按钮,打开程序AppB,隐藏菜单窗口.
当AppB程序关闭时,显示先前隐藏的菜单窗口.
--------------------------------------------
这两个程序都是由我编写的.
用什么方法能够较好的实现这种效果:消息?API?,请提供代码实例.
已知一个菜单程序AppA
点击其中一个按钮,打开程序AppB,隐藏菜单窗口.
当AppB程序关闭时,显示先前隐藏的菜单窗口.
--------------------------------------------
这两个程序都是由我编写的.
用什么方法能够较好的实现这种效果:消息?API?,请提供代码实例.
Call ShowWindow(AppA窗口的句柄)
ShowWindow Declare Function ShowWindow Lib "user32" Alias "ShowWindow" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long 说明
控制窗口的可见性(在vb里使用:针对vb窗体及控件,请使用对应的vb属性)
返回值
Long,如窗口之前是可见的,则返回TRUE(非零),否则返回FALSE(零)
参数表
参数 类型及说明
hwnd Long,窗口句柄,要向这个窗口应用由nCmdShow指定的命令
nCmdShow Long,为窗口指定可视性方面的一个命令。请用下述任何一个常数
SW_HIDE 隐藏窗口,活动状态给令一个窗口
SW_MINIMIZE 最小化窗口,活动状态给令一个窗口
SW_RESTORE 用原来的大小和位置显示一个窗口,同时令其进入活动状态
SW_SHOW 用当前的大小和位置显示一个窗口,同时令其进入活动状态
SW_SHOWMAXIMIZED 最大化窗口,并将其激活
SW_SHOWMINIMIZED 最小化窗口,并将其激活
SW_SHOWMINNOACTIVE 最小化一个窗口,同时不改变活动窗口
SW_SHOWNA 用当前的大小和位置显示一个窗口,不改变活动窗口
SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口,同时不改变活动窗口
SW_SHOWNORMAL 与SW_RESTORE相同
dim whwnd as long
whwnd=FindWindow(vbnullstring,"AppA的窗口标题")
1 像 faysky2() 说的那样,处理AppB程序的退出事件,这种办法的缺点是,如果AppB是非正常关闭,则实现不了预期的效果2 AppA中调用了AppB之后,在AppA中不停的查找AppB,如果找不到,就进行处理,这种办法的缺点是比较浪费资源
'用了GetDesktopWindow,和SetWindowPos
'-----------------------------------------------------------------------------------
Private Sub Form_Unload(Cancel As Integer)
Dim whwnd As Long
Dim wRect As RECT, dRect As RECT
whwnd = FindWindow(vbNullString, "南琼考试系统")
If whwnd <> 0 Then
Call GetWindowRect(whwnd, wRect)
Call GetWindowRect(GetDesktopWindow, dRect)
Call SetWindowPos(whwnd, HWND_TOP, (dRect.Right - (wRect.Right - wRect.Left)) / 2, (dRect.Bottom - (wRect.Bottom - wRect.Top)) / 2, wRect.Right - wRect.Left, wRect.Bottom - wRect.Top, SWP_NOSIZE)
Call ShowWindow(whwnd, 9)
End If
End Sub
'-----------------------------------------------------------------------------------
'谁再讲讲 rainstormmaster(暴风雨 v2.0) 提到的第二种方案
'即不对AppB进行编码,在AppA对监视AppB是否正在运行.
'即不对AppB进行编码,在AppA对监视AppB是否正在运行.关键是不停的查找,这个在do while循环(里面别忘了加doevents),或者在定时器中查找(查找就用findwindow)都可以