VB 改变窗口所有者(API实现)

 本代码相当于VB Form.Show 0, OwnerForm  ,只是使用api实现而已,被控制窗口永远在所有者窗口的上面,

但是在实际使用中,还是需要子类化类处理窗口的激活状态,

本代码为本博原创,引用请注明出处:http://www.cnblogs.com/ywb-lv/archive/2013/01/06/2847005.html

'如果窗口已经创建,
'可以通过::SetWindowLong(hWnd, GWL_HWNDPARENT,(Long)hWndNewOwner)来改变
'----------示例代码---------------------
  Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  Private Const GWL_HWNDPARENT = (-8)

Sub SetNewFormOwner1()
    '这里实现 form1 被 form2 的所控制   ,关闭form2  将 关闭form1
    ' Call SetWindowLong(Form1.Hwnd, GWL_HWNDPARENT, Form2.Hwnd)    '
    '这里实现 form2 被 form1 的所控制   ,关闭form1  将 关闭form2
    Call SetWindowLong(Form2.Hwnd, GWL_HWNDPARENT, Form1.Hwnd)
End Sub

Sub SetNewFormOwner2(ByVal cHwnd As Long, ByVal OwnerHwnd As Long)
    Call SetWindowLong(cHwnd, GWL_HWNDPARENT, OwnerHwnd)
End Sub

Private Sub Command1_Click()
    SetNewFormOwner1
    Form2.Show
End Sub
'参考: http://bbs.csdn.net/topics/350229217

 

你可能感兴趣的:(VB 改变窗口所有者(API实现))