C++ Tastatureingaben als WCHAR

Magogan

Lieutenant
Registriert
Aug. 2013
Beiträge
606
Hi,

ich würde gerne in meinem Programm Tastatureingaben einzeln als WCHAR speichern. Wenn also jemand A oder ë oder ₪ (keine Ahnung, was das Zeichen bedeutet) eingibt, soll das als Unicode-Zeichen in einer WCHAR-Variable gespeichert werden. Bei Konsolenanwendungen sollte das ja mit getwchar() gehen, aber was mache ich in einer Win32-Anwendung ohne Konsole? Ich finde auch bei Google nichts dazu. Das muss ja eigentlich einfach sein, aber ich weiß gerade echt nicht, wie das gehen sollte... (Der Benutzer soll übrigens nicht nach jedem Zeichen Enter drücken müssen.)

Grüße,
Magogan
 
Du kannst z.B. in deiner WndProc() WM_KEYDOWN-Messages verarbeiten:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms646280(v=vs.85).aspx

Aus dem wParam-Parameter kannst du dann erkennen, welche Taste gedrückt wurde:

http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx

Du musst dir dann nur noch den dazu passenden WCHAR raussuchen. Beispiel:
Code:
LRESULT CALLBACK WndProc(/* ... */)
{
    //...
    case WM_KEYDOWN:
        if (wParam == 0x41)
        {
             WCHAR wch = L'\A';
        }
        break;
}
 
Ja, toll, so weit war ich auch schon. Wenn du ein paar Jahre Zeit hast, kannst du das gerne für alle 113021 Unicode-Zeichen so schreiben. Es muss aber eine einfachere Lösung geben, schließlich will ich, dass man ganze Sätze eingeben und die mit Enter ansenden kann, praktisch ein Chat. Die Ausgabe von beliebigen Zeichen funktioniert auch schon, nur an der Eingabe scheitere ich gerade...
 
Magogan schrieb:
Ja, toll, so weit war ich auch schon.
Davon sagtest du nichts, man konnte also nicht davon ausgehen.

Magogan schrieb:
Wenn du ein paar Jahre Zeit hast, kannst du das gerne für alle 113021 Unicode-Zeichen so schreiben.
Wieso, es reicht doch, das für alle Unicode-Zeichen zu machen, für die es auf deiner Tastatur auch Tasten gibt, das sind ja nicht mehr als um die 100.

Oder willst du das so machen, dass man den Unicode-Code für das jeweilige Zeichen eintippt? Also z.B. bei gedrückter Alt-Taste die Ziffernfolge 0 2 3 4 für das e mit dem ^ drauf, so wie hier:

http://de.wikipedia.org/wiki/Unicode#Microsoft_Windows

beschrieben? Wusste gar nicht, dass getwchar() so was kann? Aber gut, das sollte auch kein so großes Problem sein, musst in der WndProc() halt die letzten seit Drücken der Alt-Taste gedrückten Ziffern speichern, daraus machst du ne Zahl, die du in den entsprechenden WCHAR konvertierst, etwa so:
Code:
int wcharAsInt = 234;
WCHAR wcharAsWChar = (WCHAR) wcharAsInt;

Magogan schrieb:
Es muss aber eine einfachere Lösung geben, schließlich will ich, dass man ganze Sätze eingeben und die mit Enter ansenden kann, praktisch ein Chat.
Bei einem Char drückst du aber doch nicht einfach nur Tasten, sondern hast zudem ein Texteingabefeld, das bei Chateingaben den Fokus hat. Unterstützt das nicht schon von Hause aus die Unicode-Eingabe per Alt+xxxx?

Edit: hab's gerade mit Notepad ausprobiert, das ja nichts anderes ist als ein Fenster mit riesiger Edit-Box. Wenn man da Alt+0234 eingibt, wird da das e mit dem ^ draus gemacht. Wenn du also ein Win32-Projekt mit Unicode-Unterstützung anlegst, sollte das bei Verwendung einer Edit-Box out of the box funktionieren.
 
Zuletzt bearbeitet:
Funktioniert ToUnicode auch mit so tollen Dingen wie ´ + a für á?

Ich will, dass Nutzer jeden Buchstaben eingeben können, den sie auch woanders eingeben können. Also auch Leute, die auf Französisch oder Chinesisch schreiben wollen, weil sie z.B. in Frankreich oder China wohnen, und dementsprechende Tastaturen verwenden.
 
Zurück
Oben