kostenloser Webspace werbefrei: lima-city


Tastatur Buchstabe bestimmen

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    chatstory

    Kostenloser Webspace von chatstory, auf Homepage erstellen warten

    chatstory hat kostenlosen Webspace.

    Hi Leute,

    Ich möchte mithilfe von WindowProcedure die Windows Events abfangen und über WM_CHAR auslesen, welcher Buchstabe eingegeben wurde, um nicht selbst das Tastaturlayout und so berücksichtigen zu müssen.
    Nun ist es aber so, dass ich auch gerne deutsche Umlaute erkennen möchte, bei mir wParam jedoch stets höchstens 255, also ein SingleByte-Char ist und somit nicht UTF-16 codiert sein kann..

    Kann mir jemand sagen, wie ich bei der WM_CHAR-message dann an den expliziten Character komme, sodass ich diesen auch in der Konsole ausgeben lassen könnte, so als Test?

    Die WndProc ist:

    LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
    	switch (uMsg)										// parse pending messages
    	{
    		case WM_CHAR:
    		{
    			switch(wParam){               
    				case 0x08:  // backspace 
                    case 0x0A:  // linefeed 
                    case 0x1B:  // escape 
    					cout << "Not supported" << endl;
    					return 1;
     
                    case 0x09:  // tab 
    					cout << "Tab Not supported" << endl;
    					return 0;
     
                    case 0x0D:  // carriage return 
    					cout <<"New Line" << endl;
    				default:
    					cout << (wchar_t)wParam << "detected" << endl;
    					return 1;
                    }
    	return DefWindowProc(hWnd,uMsg,wParam,lParam);
    }


    Wenn ich ä,ö oder ü drücke, erhalte ich nur ein Byte an Daten in wParam und kann über die Konsole nur kryptische Zeichen ausgeben...
    Die cin-Eingabe von Umlauten klappt aber...

    Kann mir jemand erklären, wie ich auch umlaute etc. korrekt abfangen und darstellen kann?


    Danke im Voraus,

    Chatstory
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    chatstory schrieb:
    Wenn ich ä,ö oder ü drücke, erhalte ich nur ein Byte an Daten in wParam und kann über die Konsole nur kryptische Zeichen ausgeben...
    Die cin-Eingabe von Umlauten klappt aber...
    Das ist ein Problem der Console... denn die nutzt immer noch den uralten unter DOS eingeführten OEM-Zeichensatz (zb Codepage 850).

    Wenn du dein Zeichen richtig ausgebeb willst kannst du eine MessageBox verwenden... dort stimmt dann der Zeichensatz.
  4. Autor dieses Themas

    chatstory

    Kostenloser Webspace von chatstory, auf Homepage erstellen warten

    chatstory hat kostenlosen Webspace.

    Ich möchte die Sache vielleicht noch etwas verallgemeinert stellen, also:

    In welchem Datentyp muss ich das WParam ablegen, damit dann auch wirklich ein passender char herauskommt, denn char ist mit nur einem Byte eigentlich zu kruz für utf-16, wenn ich das richtig sehe...

    @hackyourlife:
    Das mit dem zeichensatz der Console stimmt sogar, aber in welchen Datentyp muss ich das wParam casten, damit ich dann in der MessageBox-Funktion wieder in den richtigen String-typ casten kann?

    also wie kann ich wParam in einen passenden character umwandeln, der sich auch ausgeben ließe? (auf einer moderneren Console ;) )
  5. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    chatstory schrieb:
    Das mit dem zeichensatz der Console stimmt sogar, aber in welchen Datentyp muss ich das wParam casten, damit ich dann in der MessageBox-Funktion wieder in den richtigen String-typ casten kann?
    Da würdest du sowas in die Art machen (C-Code, C++ kann ich kaum):
    char buffer[32];
    sprintf(buffer, "Character: \"%c\"", wParam);
    // in buffer ist dein String den du an MessageBox übergeben kannst


    chatstory schrieb:
    also wie kann ich wParam in einen passenden character umwandeln, der sich auch ausgeben ließe? (auf einer moderneren Console ;) )
    Versuch mal die Ausgabe deineb Programms in eine Datei umzuleiten und öffne dann diese Datei mit einem Editor. Was siehst du? Die richtigen Zeichen?
  6. Autor dieses Themas

    chatstory

    Kostenloser Webspace von chatstory, auf Homepage erstellen warten

    chatstory hat kostenlosen Webspace.

    vielen Dank für die Methode mit dem char buffer, die hat das gewünschte Ergebnis geliefert, wchar_t hat bei WPARAM nämlich fehler hervorgerufen ^^

    jetzt wird in der Message-Box tatsächlich der richtige Buchstabe angezeigt und um es auf der Konsole anzuzeigen, müsste ich von meinem Programm die Werte durch die Hexadezimalcodes ersetzen lassen... da ich dazu keine Lust habe, denke ich, ich bleibe bei der Datei/Textboxausgabe :)
    insofern herzlichen Dank für den Lösungsvorschlag :D

    hat funktioniert :)
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!