Witam,
Mam następujący problem:
Mam plugin w pliku DLL (DLLka pisana w Visual C++ z użyciem MFC). Udostępnia on między
innymi funkcję LoadDialog() która zwraca mi uchwyt (HWND) do formatki/okienka
z konfiguracją owego plug'a.
W uproszczeniu:
HWND LoadDialog() {
CDialog* pNewDialog = new CDialog(); /*tworzenie klasy okna*/
pNewDialog->Create (MAKEINTRESOURCE(IDD_ID_ZASOBU), NULL))
/*ladowanie okna z zasobow*/
return pNewDialog->GetSafeHwnd();
}
Aplikacja 'glowna' dostaje ten HWND, konwertuje go sobie na CWnd* poprzez:
FromHandle( HWND_PLUGINU )
Następnie takie 'coś' jest wrzucane na zakładkę TabControla (ustawiam Parent'a
itp.) i wyswietlene:
ShowWindow(SW_SHOW)
Tak było kiedy oba moduły były pisane w MFC. Problem polega na tym, że pluginy
mają być częścią znacznie większej aplikacji macierzystej, która jest napisana
w .NET (Managed C++). Nie potrafię sobie poradzić właśnie z przejściem z HWND
na coś używalnego z poziomu Managed C++.
Próbowałem podobnie:
Mój HWND zrzutowałem sobie na IntPtr i usiłowałem także wywołać
FromHandle()... ale wygląda na to że nie tędy droga (ew. robię coś źle -
jeżeli chodzi o .NET, to jestem kompletnie zielony). Znalazlem co prawda kilka
poradnikow w google, ale wszystkie dotyczą mieszania MFC z .NETem w jednym pliku.
Czy mógłby mi ktoś poradzić (kawałek kodu?) jak w możliwie bezbolesny sposób
przejść z HWND dialogu na System::TabPage^ (tzn. zapewne
samego tab'a będę musiał stworzyć przez gcnew, ale jak dodać na niego mój
dialog w .NET?). Czy jest to w ogóle możliwe (tzn. takie konwersje MFC<->.NET
zahaczając jeszcze po drodze o WinAPI)?
Chodzi mi mniej więcej o taką ścieżkę konwersji:
CDialog*->CWnd*->HWND--(interfejs_plug<->app)-->Control->TabPage
W skrócie: jak obsłużyć w .NET okno dialogowe mając tylko jego
'niskopoziomowy' uchwyt? (tzn. jak je zadokować w .NETowym tabcontrolu i
pokazać?) W grę wchodziłoby nawet mieszanie kodu 'managed' i 'unmanaged', choć
muszę przyznać, że raczej kiepsko mi to wychodzi). Piszę w VS2005...
Z góry dziękuję za pomoc,
PS. Co prawda piszę w C++, ale uznałem że bliżej tematowi do .NET i C# niż do samego C i stąd wybór tego akurat działu
PPS. Kopię tego posta wysłałem na pl.comp.programming