SetWindowText()/GetWindowText()



  • Hi,
    ich habe 2 eigentlich ganz einfache fragen, habe aber nirgends eine passende Lösung gefunden: es geht um die Funktionen SetWindowText() und GetWindowText(); bei GetWindowText soll der fenstername in einer variablen gespeichert werden, bei folgendem Code wird aber nur das U von "Unbenannt - Editor" gespeichert und ausgegeben:

    HWND editor=FindWindow(0, TEXT("Unbenannt - Editor"));
    char fenstertitel[1024];
    GetWindowText(editor, (LPWSTR)fenstertitel, 1024);
    cout<<"aktueller Fenstertitel: "<<fenstertitel<<endl;
    

    aber eigentlich sollte hier doch der komplette Titel gespeichert werden ?! 😕

    und bei SetWindowText soll der benutzer einen neuen Fenstertitel eingeben. Wenn diese nicht eingegeben werden muss geht das ja ganz einfach:

    SetWindowText(hwnd, TEXT("neuer titel"));
    

    das funktioniert auch super, aber der neue titel soll vom benutzer eingegeben werden und in einer variablen gesoeichert werden.

    bei mienem bisherigen code tut sich da allersings leider garnichts außer einigen rechtecken in der titelleiste:

    cout<<"geben Sie den neuen fenstertitel ein!\n";
    char neu[1024];
    cin>>neu;
    SetWindowText(editor, (LPCWSTR)neu);
    

    was mache ich denn bei den beiden Codebeispieln falsch und wie kann ich es besser machen?

    danke schonmal,
    andi01.



  • andi01 schrieb:

    bei folgendem Code wird aber nur das U von "Unbenannt - Editor" gespeichert und ausgegeben:

    das doofe 'cout' kommt mit UTF-16 nicht klar. benutze 'wprintf' oder sowas.
    🙂



  • mit diesem code hier habe ich noch immer dasselbe Ergebnis:

    cout<<"Bitte oeffnen Sie editor und druecken Sie eine taste!\n";
    getch();
    HWND editor=FindWindow(0, TEXT("Unbenannt - Editor"));
    char fenstertitel[1024];
    GetWindowText(editor, (LPWSTR)fenstertitel, MAX_PATH);
    cout<<"aktueller Fenstertitel: ";
    printf(fenstertitel);
    cout<<endl;
    

    es wird immernoch nur das U ausgegeben. Was ist an diesem Code denn falsch?

    falls es von interesse sein sollte: ich verwende WinXP SP 2 und Microsoft Visual C++ 2008 Express Edition.

    mfg,
    andi01.



  • andi01 schrieb:

    printf(fenstertitel);

    nicht printf, versuch mal wprintf.
    'cout' ist auch so doof.
    🙂



  • ok, danke, das geht jetzt, danke 🙂 :

    cout<<"Bitte oeffnen Sie editor und druecken Sie eine taste!\n";
    getch();
    HWND editor=FindWindow(0, TEXT("Unbenannt - Editor"));
    WCHAR fenstertitel[1024];
    GetWindowText(editor, (LPWSTR)fenstertitel, MAX_PATH);
    cout<<"aktueller Fenstertitel: ";
    wprintf(fenstertitel);//gaaanz wichtig, nicht prointf oder cout!!!
    cout<<endl;
    

    bleibt noch das oben beschrieben Problem mit SetWindowText 😞

    ich vermute mal das problem liegt bei der typumwandlung von char nach LPCTSTR, aber ich muss ja casten, denn man kann nichts direkt als LPCTSTR eingeben, da kommt zuminsdest ne fehlermeldung, und mir fällt auch kein anderer wirklich erfolgversprechender weg ein char ohne cast in LPCTSTR zu konvertieren 😞

    mfg,
    andi01.



  • andi01 schrieb:

    bleibt noch das oben beschrieben Problem mit SetWindowText 😞

    das wird wohl am 'cin' liegen. nimm _getws oder _getws_s
    🙂



  • danke, jetzt geht's 🙂

    jetzt würde mich nur noch eins interessienen: (rein interessehalber, mal will ja auch was aus dem thread lernen und nicht nur irgendeinen code verständnislos reinkopieren: gut, es geht, aber ich weiß nicht warum 😃 )

    Warum darf ich kein cin bzw. cout/printf verwenden? 😕

    danke schonmal für die schnellen antworten,
    andi01.



  • Du arbeitest offensichtlich mit Unicode. cout/printf arbeiten aber mit Multibyte. Wenn Du Dein Projekt von Unicode auf Multibyte umstellst, kannst Du auch mit cout/printf arbeiten, ansonsten musst Du halt Funktionen benutzen, die mit Unicode umgehen können.



  • Unicode ist sowieso Schmarrn!



  • ok, kapiert. wie stellt man das um? irgendwo in den compileroptionen?



  • andi01 schrieb:

    Warum darf ich kein cin bzw. cout/printf verwenden? 😕

    windows arbeitet 'native' mit utf-16, d.h. jedes zeichen belegt 2 bytes. cin/cout hätten aber gern 1-byte zeichen. es gibt sicherlich tricks, mit denen man cin/cout utf-16 beibiegen kann, aber dann haste übelstes c++ gefrickel am hals, das würde ich mir nicht geben. dann lieber die option von Belli, wenn du auf cin/cout nicht verzichten willst: projekt auf ascii umstellen.
    🙂



  • ok ich behalte doch lieber die ursprüngliche Option bei.

    danke für die ganzen Antworten 🙂 ,
    andi01.


Anmelden zum Antworten