SetWindowText und LPCWSTR Problem mit Visual Studio 2005



  • Also ich programmiere seit heute mit Visual Studio 2005 und habe gemerkt da ist einiges neu mit den Strings usw.

    Ich moechte ganz simple den Window Text via SetWindowText aendern.
    Nur kann ich hier nicht mehr so machen

    char buf[50];
    sprintf(buf, L"test");
    SetWindowText(hWnd, buf);
    

    denn da krieg ich

    error C2664: 'SetWindowTextW' : cannot convert parameter 2 from 'char [50]' to 'LPCWSTR'

    Dann hab ich mal auf google geschaut und gesehen LPCWSTR ist ein WCHAR.
    Wie krieg ich denn "test" bzw eine andere char Variable in einen WCHAR ?

    Habe vorher noch nie mit WCHAR gearbeitet

    EDIT : habs auch schon mit nem Cast probiert funktioniert aber auch nich

    SetWindowText(hWnd, (LPCWSTR)"test");
    


  • N' Abend,

    Du musst durchgehend UNICODE-Typen-Anpassungen vornehmen, also anstatt char, wchar_t, oder gleich TCHAR 😉 (automatische Anpassung durch den Compiler).

    Id est:

    [b]TCHAR[/b] szNewText [] = [b]TEXT[/b]("Der neue Fenstertext.");
    [b]SetWindowText[/b](hWndDest, szNewText);
    

    Hab Dir mal das Wichtige markiert 😉 .



  • also sollte man komplett auf char verzichten bei VS2005 ?



  • Du solltest eigentlich nur TCHAR anstelle von "char" verwenden!
    Und natürlich auch alle anderen Funkltion aus "tchar.h" anstelle den "normalen (z.B: *kein* strcpy, sondern _tcscpy (mal abgehesen davon, dass man _tcscpy_s verwenden sollte 😉 )



  • Danke, ich versuch mich dran 🙂

    Ganz schoen schwer sich auf VS2005 einzustellen. Sehr viel anders.



  • PhoeNix_FasT schrieb:

    Ganz schoen schwer sich auf VS2005 einzustellen. Sehr viel anders.

    Na, so kann man das nicht sagen.
    Wenn man es schon mit VC5 richtig gelernt hätte, dann hättest Du heute keine grossen Schwierigkeiten (ausser das mit der Secure-CRT vielleicht; was man aber auch abschalten kann).
    Auch werden im OS zukünftige Funktionen fast nur noch in einer Unicode-Variante angeboten, aus diesem Grunde wird es höchste Zeit, dass VS Unicode zur Default einstellung macht! Du kannst aber natürlich jederzeit wieder zurückstellen...



  • Jochen Kalmbach schrieb:

    Auch werden im OS zukünftige Funktionen fast nur noch in einer Unicode-Variante angeboten, aus diesem Grunde wird es höchste Zeit, dass VS Unicode zur Default einstellung macht! Du kannst aber natürlich jederzeit wieder zurückstellen...

    Hm der Grund, aus dem Du folgerst, dass man zukünftige Programme nur noch in UNICODE schreiben sollte (also das MS alle Funktionen NUR als UNICODE implementiert), finde ich irgendwie unzureichend 🤡 . UNICODE verbraucht ja viel mehr Speicher und ist in den meisten Programmen (also gerade in den kleineren) unsinnig.



  • Na, wenn der Speicherverbrauch ein Argument ist, dann spricht es immer noch lange nicht gegen Unicode... eher gegen UTF-16/32 als kodierung dazu 😉
    Du kannst ja immer noch UTF-8 verwenden (hast aber dann trotzdem die Probleme dies nach UTF-16 zu konvertieren, wenn Du neue PSDK Funktionen aufrufen willst).



  • Was für eine UTF-Kodierung verwendet denn die VS 2005 ?



  • Was is denn der Unterschied zwischen WCHAR und TCHAR ?



  • WCHAR ist immer wchar_t.
    TCHAR ist wchar_t, wenn das Symbol UNICODE definiert ist, andernfalls einfach char (der Compiler ersetzt diese Direktiven bei der Compilierung).



  • also einfach immer WCHAR und gut ist ^^



  • Ich denke da nunmehr kaum mehr jemand Programme schreibt die auch noch auf Windows9x laufen kann man auf TCHAR verzichten, und alles mit wchar_t machen. Das einzig doofe dabei ist dass immer noch so viele Libs kein Unicode unterstützen, aber damit muss man sich mit TCHAR genauso wie mit wchar_t rumschlagen 😞

    Ahja, ich nehme wchar_t statt WCHAR. Sehe keinen Sinn dahinter das alte WCHAR zu verwenden wo VC seit 7.1 ja jetzt wchar_t kennt... 🙂



  • Ich würde/werde weiterhin TCHAR verwenden, da allse PSDK Header auf TCHAR basieren. Damit kann es nie Probleme geben, wenn Du mal vergisst _UNICODE/UNICODE zu definieren (oder es absichtlich nicht willst).

    Wenn dann MS mal umstellt (was ich stark bezweifle), dann kann ich ja auch wechseln (dann wird vermutlich einfach TCHAR = wchar_t definiert)...


Anmelden zum Antworten