Cześc. Wiem, że może temat nie do końca powinien być Newbie, ale tutaj raczej większość zagląda. A rozwiązanie może być banalne, bo miałem skuteczny kod, ale nie umiem go odtworzyć, a zamotany usunąłem projekt. Chociaż nnie mam pewności jak zawsze to odtworzyć, bo tamten korzystał z globalnego Hooka na WH_CBT
. Jednak nie mogę go jednak użyć w docelowym kodzie, bo aplikacja będzie pracowała w Sandboxie, który nie umożliwia takich rzeczy jak zakłądanie globalnym Hooków. Ok, do rzeczy.
Interesuje mnie rozwiązanie w dowolnym języku, ktore będzie można z Waszą pomocą przeportować do Delphi i WinAPI. Najlepiej jednak żeby było to w Delphi. Chodzi o to, że mamy dllkę d3d9.dll
, która jest jakby wrapperem (nie wiem czy to fachowe określenie), po prosru eksportuje funkcje, z ktorych korzysta docelowy program - konkeretnie emulator Amigi. Poza tym dllka zawiera własny kod, ktory między innymi sybclassuje WndProc niektórych okien.
Chodzi o to aby pokzać w żadanym momencie DialogBox z zasobów, ale w taki sposób aby kiedy aplikacja jest na pełnym ekranie okno głowne emulatora (o klasie PCsuxRox
), w którym na pełnym ekranie wszelkie komunikaty przejmuje inne okno - dziecko (o klasie AmigaPowah
) - nie straciła focusa. Czyli mój DialogBox pokazał się nad oknem gry.
Kombinowałem na rózne sposoby. Oryginalny kod WinUAE w C++, którego nie za bardzo ogarniam - potrafi pokzać GUI ustawień (stała IDD_PANEL
) zawsze bez straty focusa nawet kiedy pełnoekranowe okno gry jest na wierzchu. Ponieważ kiedy gra jest w okienku dialog można pokazać modalnie i wszystko jest ok. Problem jest tylko z pełnym ekranem.
Wywoływałem DialogBox na milion sposobów, w tym zmieniając mu style okna, ale to nie pomaga. Nawet pokazanie MessageBoxa z pierwszym parametrem jako ustalony na pewno prawidlowy uchwyt okna jako pierwszy parametr pokazuje go pierwszy raz bez straty focusa, później po zamknięciu i ponownym uruchomieniu emulatora już jest źle. A robie test po naciśnięciu jednego z nieużywanych F'ów.
Oryginalny kod, który pewnie pozwala na takie rzeczy jak pokazanie dialogu bez straty focusa na pełnym ekranie - jest w kodzie WinUAE w pliku ...\od-win32\win32gui_extra.cpp
. Wrzuciłem go na: http://pastebin.com/gE52vksp - jednak nie potrafię przetłumaczyć użytych struktur DLGTEMPLATEEX
i DLGTEMPLATEEX_END
oraz użytych funkcji.
Aktualne źródło znajduje się na: http://www.winuae.net/files/source/winuaesrc2600.zip (może się wolno pobierać - niestety taki serwer). Proszę kogoś doświadczonego o poradzenie jak można pokazać dialogbox nad pełnoekranowym oknem bez straty przez nie focusa na rzecz pokazanego modalnie dialogu. Z góry dziękuję za wszelkie porady i ewentualny kod. Googlowałem na różne sposoby, ale znajdowałem bzdety nic mi nie dające i nie na temat.