我们用过vc的都知道,选择vc的“工程”菜单栏,然后选择“设定”,就会弹出一个小窗体。不管我们是切换到其它的程序还是最小化后,再切换到vc中,这个小窗体还是能他的父窗体(也就是vc)一起显示出来,而且还获得焦点,而且焦点总是在这个小窗体上,这是怎么实现呢?我这里有个方案,但我觉得不是很好,请大家多发言,说说自己的想法。

解决方案 »

  1.   

    好象是模态对话框(vc中)。vb中的messagebox应该是封装好的模态对话框!!
    个人陋见,仅供参考!
      

  2.   

    模式窗体是肯定要用的,但还要建立父子关系阿。我把我写的程序拿给大家看:
      父窗体:
       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
      

  3.   

    哦,对不起,上面那句:temp = SetForegroundWindow(handleT)是多余的。子窗体有个class和一个form,在class里的程序是:
    Public Sub show()
        Form1.show vbModal
    End Sub大家可以把程序跑起来就可以发现问题了,父子关系是建立起来了,但是可以互相切换焦点。
      

  4.   

    使用模式窗体 form.show 1
      

  5.   

    大家好像没有完全理解我的意思。我的意思是现在是两个vb程序之间互相调用,而且要为父子关系。大家把我上面的程序编译完,运行的时候就会发现以下的问题:
       虽然两个程序的父子关系建立起来了,但是可以互相切换焦点。
       
    ps:
       因为这里是vb的两个工程编出来的exe,要怎样才能像一个工程里的模式窗体 form.show 1
    这样的效果呢?
      

  6.   

    Command1_Click()改成:
    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
      

  7.   

    to mmzz_wang(abcdef): 
      
       这种方法对于其它的可以,但是用于我这个程序却不行,因为我编译出来的不是可以独立运行的exe,而是通过class里面的这个函数调的:Public Sub show()
        Form1.show vbModal  '这个form1是子窗体
    End Sub