WinApifunktion trotz wxWidgets



  • Ich möchte die WinAPI-funktion FindWindow()
    verwenden. Leider wurde diese von wxWidgets "überschrieben".
    kennt jemand eine möglich keit sie trotzdem aufzurufen?



  • Eine WinAPI überschreiben geht doch gar nicht!
    Schreibe ::FindWindow(...), also vorher zwei Doppelpunkte.



  • stimmt, mit überschrieben ist das falsch ausgedrückt. Aber du hast recht mit dem Güligkeitsbereich geht das jetzt. aber jetz hab ich ein anderes Problem:

    also ich schreib

    hWnd = ::FindWindow(NULL, "Name des Progs");
    

    dann meint der compiler, dass man den 2. Parameter in LPCWSTR konvertieren soll
    also:

    hWnd = ::FindWindow(NULL, (LPCWSTR)"Name des Progs");
    

    dann kann ich das Programm zwar übersetzen, mein Handle wird aber nicht gefunden...

    Warum will der jetzt aufeinmal ne Typenkonvention??(in einer Konstolenanwendung hat es auch so funktioniert...) und wie umgeh ich das?



  • Hy

    Probierst doch mal so:

    hWnd = ::FindWindow(NULL, _T("Name des Progs"));
    

    Bzw. wenn du Fehlermeldung mal aufmerksam liest dann steht da das er einen LPCWSTR will. Das W steht für wide-character, also muss dem String ein L"" vorgesetzt werden, bzw. mit dem Macro _T("") sucht er sich es selbst aus, ob ein L davor gesetzt werden muss oder nicht.

    Mfg Marco



  • Wenn du nicht unbedingt einen HWND brauchst, dann ist wohl die wx-Variante besser:

    wxWindow* wxWindow::FindWindowByName(const wxString& name, wxWindow* parent = NULL)
    

    Diese ist statisch, d.h. du kannst sie direkt so aufrufen (ohne wxWindow-Objekt zu erstellen): wxWindow::FindWindowByName(_T(....));

    Den OS-Handle (HWND bei Win) bekommt man über wxWindow::GetHandle().
    Dieser ist jedoch nicht plattformunabhängig!



  • Softwaremaker schrieb:

    Wenn du nicht unbedingt einen HWND brauchst, dann ist wohl die wx-Variante besser:

    wxWindow* wxWindow::FindWindowByName(const wxString& name, wxWindow* parent = NULL)
    

    Diese ist statisch, d.h. du kannst sie direkt so aufrufen (ohne wxWindow-Objekt zu erstellen): wxWindow::FindWindowByName(_T(....));

    Den OS-Handle (HWND bei Win) bekommt man über wxWindow::GetHandle().
    Dieser ist jedoch nicht plattformunabhängig!

    Ich möchte das so nochmal unterstreichen. Der Vorteil von wxWidgets ist die X-Platform-Fähigkeit und das gibst du mit dem expliziten Aufruf einer WINAPI-Funktion auf. 🙂
    rya.



  • Da wx keine Fenster ausserhalb des eigenen Programmes findet, dürfte das in diesem Fall zimelich Witzlos sein...



  • Dann wäre dieses Programm wohl kaum möglich: http://www.winsplit-revolution.com/
    rya.



  • Neercseulb schrieb:

    Ich möchte die WinAPI-funktion FindWindow()
    verwenden. Leider wurde diese von wxWidgets "überschrieben".
    kennt jemand eine möglich keit sie trotzdem aufzurufen?

    Was du vermutlich meinst ist die <wx/msw/winundef.h> ...
    Jedes mal wenn man in einer wx-Application die <windows.h> includiert, sollte man direkt im Anschluss die Undef-Datei includieren.

    MFC + wx-Api: natürlich ist es nicht platformunabhängig wenn man die spezische Plaform-Api anspricht, aber genau das willst du ja nicht.

    Meines (theoretischen) Wissens nach, ist es möglich die komplette MFC-Api zu nutzen und auch gemischte Applikationen zu betreiben.

    wxWindow::GetHandle()const
    Returns the platform-specific handle of the physical window.
    Cast it to an appropriate handle, such as HWND for Windows, Widget for Motif, GtkWidget for GTK or WinHandle for PalmOS.

    Im wxWiki sollten auch entsprechende Einträge vorhanden sein.


Log in to reply