Typenkonvertierung von HWND



  • HWND ist in der API ein Handle auf das erstellte Fenster.
    Mich würde nun allerdings mal interessieren ob es möglich ist in einer MessageBox HWND auszugeben.

    Also das da mal steht, was in HWND steht:

    MessageBox(NULL, HWND.ToString(),
    "Jaja- das hier ist eine MEssageBox vom  Handle",
    MB_ICONINFORMATION | MB_OK | MB_DEFBUTTON1);
    

    Leider funktioniert das so nicht... ich weiß ja noch nicht mal, auf welchen Datentyp HWND zeigt.

    cya
    David



  • Auf welchen Datentyp HWND "zeigt", sollte dir eigentlich auch egal sein - wichtig ist, daß die WinAPI-Funktionen wissen, wie sie damit umgehen können. Du könntest z.B. per GetWindowText() den Titel des zugeordneten Fensters erfragen, um diesen dann auszugeben:

    int namelen=GetWindowTextLength(hwnd);
    LPTSTR name = new[namelen+1];
    GetWindowText(hwnd,name,namelen+1);
    
    MessageBox(NULL, name, "Jaja- das hier ist eine MEssageBox vom  Handle", MB_ICONINFORMATION | MB_OK | MB_DEFBUTTON1);
    

    (PS: Unter MFC wird das Handling wesentlich eleganter - aber dort hantierst du auch nicht mit nackten Handle's, sondern mit CWnd-Objekten (die intern wieder ein HWND kapseln))



  • Ist MFC eine andere Grafische Oberfläche?



  • Was heißt "andere"? (bzw, welches ist dann die "erste" Oberfläche?)

    MFC (Microsoft Foundation Classes) ist eine Klassenbibliothek, die die WinAPI-Anbindung wrappt - und damit die Verwendung etwas vereinfacht.



  • Habs grad bei Wikipedia schon gelesen...-.-
    Also ist es eig sinnlos API zu lernen, weil MFC eh besser ist? 🙂



  • 777 schrieb:

    Habs grad bei Wikipedia schon gelesen...-.-
    Also ist es eig sinnlos API zu lernen, weil MFC eh besser ist? 🙂

    nein, denn wenn du mal mit MFC nicht weiter kommst, musst du doch wieder winapi benutzen.



  • ahso... okay danke für eure Hilfe bisher.
    Nur jetzt nochmal zu meiner Ursprünglichen Frage.
    Als Antwort postete mir CStoll folgenden Code, zudem ich noch ein paar Fragen habe:

    int namelen=GetWindowTextLength(hwnd);
    LPTSTR name = new[namelen+1];
    GetWindowText(hwnd,name,namelen+1);
    
    MessageBox(NULL, name, "Jaja- das hier ist eine MEssageBox vom  Handle", MB_ICONINFORMATION | MB_OK | MB_DEFBUTTON1);
    

    LPTSTR ist ein Typedef auf Char, wenn ich mich nicht irre, oder?

    Allerdings gibt nun die MessageBox lediglich den Text an, welcher in der Titelleiste des Formulares angezeigt wird.

    Meine Frage war allerdings, wie ich den Handle auf das Fenster ausgeben kann.
    Also einen numerischen Wert oder eine Adresse.

    Geht das überhaupt? Muss ich da nicht den Datentyp wissen?

    cya
    David



  • 777 schrieb:

    LPTSTR ist ein Typedef auf Char, wenn ich mich nicht irre, oder?

    Fast - LPTSTR ist char* (oder wchar_t*).

    Allerdings gibt nun die MessageBox lediglich den Text an, welcher in der Titelleiste des Formulares angezeigt wird.

    Meine Frage war allerdings, wie ich den Handle auf das Fenster ausgeben kann.
    Also einen numerischen Wert oder eine Adresse.

    Was erwartest du genau für eine Ausgabe? Du könntest natürlich auch das Handle als void-Zeiger interpretieren und über sprintf() in eine "lesbare" Darstellung umwandeln, aber besonders aussagekräftig wird das Ergebnis nicht sein - der einzige, der etwas mit dem Wert anfangen kann, ist die WinAPI.



  • 777 schrieb:

    Meine Frage war allerdings, wie ich den Handle auf das Fenster ausgeben kann.
    Also einen numerischen Wert oder eine Adresse.

    char buff[256];
    sprintf (buff, "%p", hwnd);
    MessageBox (NULL, buff, buff, MB_OK);
    

    🙂



  • Supie!
    Das klappt ;-)!!!


Anmelden zum Antworten