Czy mogę uzyskać zachowanie ustawienia właściciela formularza WinForm za pomocą hwnd / NativeWindow?

Moja aplikacja to plik wykonywalny vb6, ale niektóre nowsze formy w systemie są napisane w języku C #. Chciałbym móc ustawić własność właściciela formularza C # za pomocą uchwytu głównego okna aplikacji, aby okna dialogowe pozostawały na górze podczas przechodzenia w tę iz powrotem między moją aplikacją a innymi aplikacjami.

Mogę pobrać hwnd głównego okna aplikacji. Nie jestem pewien, co mogę tam zrobić?

UPDATE Październik 20 '08 o 17:06:

Scott,

Dzięki za odpowiedzi. Przeoczyłem, że parametr metody Show / ShowDialog nie był typu Form - patrzyłem tylko na właściwość Owner.

Lekko zmodyfikowałem kod, którego używam z powyższego - mamy komponent, który ładuje nasze formularze i wywołuje ShowDialog. Mój kod wygląda tak:

Form launchTarget = FormFactory.GetForm(xxx);  // psuedo-code for generic form loader
launchTarget.StartPosition = FormStartPosition.CenterParent;
IWin32Window parentWindow = GetWindowFromHwnd(hwnd);

launchTarget.ShowDialog(parentWindow);

GetWindowFromHwnd jest wersją twojego kodu owiniętą metodą:

private IWin32Window GetWindowFromHost(int hwnd)
{
    IWin32Window window = null;
    IntPtr handle = new IntPtr(hwnd);

    try
    {
        NativeWindow nativeWindow = new NativeWindow();
        nativeWindow.AssignHandle(handle);
        window = nativeWindow;
    }
    finally
    {
        handle = IntPtr.Zero;
    }

    return window;
}

Niestety to nie robi tego, co miałem nadzieję. Formularz wyświetla się modalnie, ale nie pojawia się we właściwej pozycji, ani nie jest na górze, gdy odsuwam się i wracam do okna nadrzędnego. Nasze moduły nie wyświetlają zadania na pasku zadań, więc okno pozornie „znika” (chociaż nadal znajduje się na liście okien Alt-Tab). To dla mnie wskazuje, że mogę nie mieć odpowiedniego hwnda. Jeśli masz jakieś inne sugestie, odpowiedz ponownie. Dzięki jeszcze raz.

AKTUALIZACJA 10 listopada 2008 o 16:25

Jedna uwaga kontynuacji - jeśli uwzględnisz to w wywołaniu metody w try / wreszcie, tak jak w drugim poście Scotta, wywołanie w bloku finally powinno być:

parentWindow.ReleaseHandle();

questionAnswers(2)

yourAnswerToTheQuestion