G
D!3ce schrieb:
Nur eine Frage noch zu den "neuen" Befehlen.
Du hast gesagt, dass meistens "einfach nur ein l" davor steht, das funktioniert zum Beispiel mit lstrcpy perfekt, nur gibt es kein lsizeof
Das mit dem "l" bezog sich ja auch nur auf Funktionen, welche explizit TCHAR Argumente verwenden. Welche Funktionen es gibt, kann man in der Platform SDK Dokumentation nachlesen. sizeof ist ein C bzw. C++ Schlüsselwort, und funktioniert daher vollkommen unabhängig davon. Zudem sind diese "l" Bezeichner WinAPI spezifisch, sizeof jedoch Standard. Dh, sie existieren in vollkommen anderen "Welten".
D!3ce schrieb:
Das funktioniert ansich perfekt, außer das ich wieder Dinge wie "Arrow:Left|||||" zu sehen bekomme.
Mal ganz abgesehen davon, sollte die Definition des Arrays mit TCHAR erfolgen.
TCHAR keyStroke[] = TEXT("Nothing pressed yet ...");
Wenn du wchar_t verwendest, legst du dich auf Unicode fest, und dann sollten auch entsprechende Literale (L"...") und WinAPI Funktionen (...W) verwendet werden.
Das Problem ist nun, dass mit
sizeof(keyStroke) / sizeof(wchar_t)
die Anzahl der Elemente im Array berechnet werden, dh diesem Array
wchar_t keyStroke[] = TEXT("Nothing pressed yet ...");
Wenn du mal die Zeichen + das abschliessende Nullzeichen durchzählst, kommst du auf das Ergebnis 24. Damit werden beim Aufruf von DrawText auch 24 Zeichen ausgegeben. Nun steht aber bereits ein ganz anderer String im Array (du solltest übrigens auch darauf achten, _niemals_ mehr als 24 Zeichen in dieses Array zu schreiben), nämlich
"Arrow: Left"
was letztendlich nur 12 Zeichen sind. Du sagst DrawText trotzdem, dass 24 Zeichen ausgegeben werden sollen. Dementsprechend steht am Ende irgendwelcher Müll.
Du solltest also eine Funktion wie lstrlen benutzen, damit es korrekt funktioniert. Oder du setzt den Parameter entsprechend der Dokumentation
If nCount is 1, then the lpString parameter is assumed to be a pointer to a null-terminated string and DrawText computes the character count automatically.