Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: sobol79 21. 05. 2021, 09:53:48

Název: Jak správně na Win32 API SetParent (Window)
Přispěvatel: 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:

Kód: [Vybrat]
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:

Kód: [Vybrat]
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:

Kód: [Vybrat]
result = SetParent(hWnd, hWndParent)

Form2 zmizí nevím kam.

Prosím poradíte mi někdo, co by mohlo být špatně?

Díky
Název: Re:Jak správně na Win32 API SetParent (Window)
Přispěvatel: sobol79 21. 05. 2021, 11:10:15
Přestože okno (child zmizí), nezasekne se to, pokračuje dál v exekuci a když mám tedy například poté:

Kód: [Vybrat]
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.