我们用过vc的都知道,选择vc的“工程”菜单栏,然后选择“设定”,就会弹出一个小窗体。不管我们是切换到其它的程序还是最小化后,再切换到vc中,这个小窗体还是能他的父窗体(也就是vc)一起显示出来,而且还获得焦点,而且焦点总是在这个小窗体上,这是怎么实现呢?我这里有个方案,但我觉得不是很好,请大家多发言,说说自己的想法。
解决方案 »
- vba中有什么办法跳过一次循环,继续下一次循环?
- 关于datalist显示数据库内容
- 奇怪!相同的代码为什么每次编译后的文件都大小不一?
- vb
- 请教多用户系统中软件安装及使用问题.
- 数据库程序打包后到别人的系统下无法运行?
- 用神龙DVD解压卡播放DVD,怎样切换原声/伴唱?播VCD已经实现了。做过VOD的朋友请进来!
- 删除记录出错,高手帮忙看看 错误提示:运行时错误3704 对象关闭时,不允许操作
- 我有一个查询窗口,我想让它总登陆在当前活动控件的下面,却总是不行,帮我看一下这段代码有什么问题?
- 如何锁定文件的打开方式?
- 如何用代码将MSHFlexGrid的指定行自动滚动到最顶行?
- 动态创建按钮的问题!
个人陋见,仅供参考!
父窗体:
Option Explicit
Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetParent Lib "User32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Declare Function SetForegroundWindow Lib "User32" (ByVal hWnd As Long) As LongPrivate Sub Command1_Click()
Dim handleP As Long ' parent window handle
Dim handleS As Long ' son window hanle
Dim handleT As Long
Dim temp As Long
Dim obj As Object
Me.MousePointer = 11
Set obj = CreateObject("sonForm.clsApp")
handleS = FindWindow(vbNullString, "SonForm")
handleT = FindWindow(vbNullString, Me.Caption)
temp = SetForegroundWindow(handleT)
handleP = SetParent(handleS, handleT)
Me.Enabled = False
obj.Show
temp = SetForegroundWindow(handleT)
Me.Enabled = True
End Sub
Public Sub show()
Form1.show vbModal
End Sub大家可以把程序跑起来就可以发现问题了,父子关系是建立起来了,但是可以互相切换焦点。
虽然两个程序的父子关系建立起来了,但是可以互相切换焦点。
ps:
因为这里是vb的两个工程编出来的exe,要怎样才能像一个工程里的模式窗体 form.show 1
这样的效果呢?
Private Sub Command1_Click()
Dim handleS As Long ' son window hanle
Dim handleT As Long
Dim temp As Long
X = Shell(GAppPath & "SonForm.exe", 1) handleS = FindWindow(vbNullString, "SonForm") handleP = SetParent(handleS, Me.hWnd)
End Sub
这种方法对于其它的可以,但是用于我这个程序却不行,因为我编译出来的不是可以独立运行的exe,而是通过class里面的这个函数调的:Public Sub show()
Form1.show vbModal '这个form1是子窗体
End Sub