Fórum Root.cz
		Hlavní témata => Vývoj => Téma založeno: sobol79  21. 05. 2021, 09:53:48
		
			
			- 
				Dobrý den,
v již existující aplikaci, ke které jsem přišel, chybí vazby child a jeho parent. To nedělá dobrotu když chci getnout top window.
Udělal jsem si vb6 projekt (existující aplikace je vb6, nikoliv však MDI..), kde jsem nastavení vazby chtěl odladit.
Šel jsem podle tohoto návodu:
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setparent (https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setparent)
V okně(Formu) po spuštění mám tlačítko s obsluhou:
Private Sub Command2_Click()
    Dim dlg As Form
    
    Set dlg = New Form2
    
    Dim result As Long
    result = GetWindowLong(hWnd, GWL_STYLE)
    result = result - (result And WS_CLIPCHILDREN)
    SetWindowLong hWnd, GWL_STYLE, result
   
    dlg.SetParentWindow Me.hWnd
    
    dlg.Show vbModal
    
    Set dlg = Nothing
End Sub
SetParentWindow ve Form2 mam potom:
Public Sub SetParentWindow(ByVal hWndParent As Long)
    Dim result As Long
    
    result = GetWindowLong(hWnd, GWL_STYLE)
    result = result - (result And WS_POPUP)
    result = result Or WS_CHILD
    result = SetWindowLong(hWnd, GWL_STYLE, result)
    
    result = SetParent(hWnd, hWndParent)
    
    result = SendMessage(hWndParent, WM_CHANGEUISTATE, (UISF_ACTIVE * 65536) + UIS_SET, 0)
    
End Sub
Bohužel na řádce:
result = SetParent(hWnd, hWndParent)
Form2 zmizí nevím kam.
Prosím poradíte mi někdo, co by mohlo být špatně?
Díky
			 
			
			- 
				Přestože okno (child zmizí), nezasekne se to, pokračuje dál v exekuci a když mám tedy například poté:
MsgBox GetWindowLong(Me.hWnd, GWL_HWNDPARENT)
vypíše to správně nového parenta.
Jen GetParent pak vrací null, krom toho, že child je neviditelný, není to zpropagované do hierarchie.