Formulários no VB: mudando a relação de parentesco com API

Visual Basic, VB .NET, ASP, Active X, Access, SQL Server

Formulários no VB: mudando a relação de parentesco com API

Usando as APIs GetParent e SetParent, você pode mudar a relação de parentesco entre as janelas da sua aplicação e fazer com que uma apareça como filha de outra. Chame GetParent passando como argumento o hWnd de uma janela para obter o hWnd de sua janela mãe. Chame SetParent passando o hWnd de uma janela no parâmetro hWndChild e o hWnd da janela que deve se tornar a sua mãe no parâmetro hWndNewParent. O importante é que você não se esqueça de restaurar a antiga mãe de toda janela filha que teve a mãe modificada antes de descarregá-la. 

Crie um novo projeto no VB e adicione dois formulários: Form1 e Form2. No módulo de código de Form1, adicione o código abaixo.

Option Explicit
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private OldParent As Long


Private Sub Form_Load()
'obtém e salva o handle da janela mãe atual
OldParent = GetParent(Me.hwnd)
Form2.Show
'modifica a mãe desta janela para Form2
SetParent Me.hwnd, Form2.hwnd
'modifica posição e tamanho da janela
'dentro de Form2

Me.Move 100, 100, 3000, 3000
End Sub


Private Sub Form_Unload(Cancel As Integer)

'necessário: restaura a velha mãe
SetParent Me.hwnd, OldParent

End Sub

No evento Unload de Form2, inclua o seguinte código:

Unload Form1

Rode o projeto e veja o que acontece quando você inicia a aplicação carregando Form1.