Guybrush Threepwood Geschrieben 17. April 2003 Geschrieben 17. April 2003 Hi, ich hab ein Editfeld und möchte das der Benutzer ein bestimmtes Zeichen nicht eingeben kann. Also das nichts passiert wenn er die Taste drückt. Wie würdet ihr das am besten angehen? Das ganze läuft mit der WindowsAPI, aber wenn ihr ne MFC Lösung habt hilft mir das evtl. auch weiter. Gruß Guybrush
Klotzkopp Geschrieben 17. April 2003 Geschrieben 17. April 2003 Vielleicht hilft das: http://fachinformatiker-world.de/forums/showthread.php?s=&threadid=33624
Guybrush Threepwood Geschrieben 17. April 2003 Autor Geschrieben 17. April 2003 So ähnlich hab ich`s auch schon probiert, nämlich das die Nachricht in dem Fall nicht an die WndProc weitergeleitet wird. Aber irgendwie erkennt er nicht wenn eine Taste gedrückt wird, weißt du vielleicht warum? while(GetMessage(&Msg,0,0,0)) { if (!IsDialogMessage(hMainWindow,&Msg)) { if (Msg.message == WM_KEYDOWN) if ((char)Msg.wParam == '#') continue; TranslateMessage(&Msg); DispatchMessage(&Msg); } } [/PHP]
Klotzkopp Geschrieben 17. April 2003 Geschrieben 17. April 2003 Weil IsDialogMessage die Nachricht nicht nur prüft, sondern gegebenenfalls auch verarbeitet: Because the IsDialogMessage function performs all necessary translating and dispatching of messages, a message processed by IsDialogMessage must not be passed to the TranslateMessage or DispatchMessage function.
Guybrush Threepwood Geschrieben 17. April 2003 Autor Geschrieben 17. April 2003 Ok, ich hab das mal auskommentiert und jetzt erkennt das Programm an der Stelle einen Tastendruck. Allerdings kann ich anscheinend das Zeichen so nicht abfragen, ich glaube ich muss dafür Virtuelle Keys benutzen. Weißt du zufällig in welcher Headerdatei VK_A, VK_TAB usw. deklariert sind?
Klotzkopp Geschrieben 17. April 2003 Geschrieben 17. April 2003 Die VK_-#defines stehen in winuser.h. Da steht auch: /* VK_0 thru VK_9 are the same as ASCII '0' thru '9' (0x30 - 0x39) */ /* VK_A thru VK_Z are the same as ASCII 'A' thru 'Z' (0x41 - 0x5A) */
Guybrush Threepwood Geschrieben 17. April 2003 Autor Geschrieben 17. April 2003 Komisch die VK_`s kennt der trotzdem nicht. Aber wenn ich den Ascii Code vom 'a' hinschreibe geht`s irgendwie auch nicht, es wird trotzdem im Editfeld hinzugefügt. while(GetMessage(&Msg,0,0,0)) { // if (!IsDialogMessage(hMainWindow,&Msg)) // { if (Msg.message == WM_KEYDOWN) if ((int)Msg.wParam == 97) continue; TranslateMessage(&Msg); DispatchMessage(&Msg); // } } [/PHP] :confused:
Klotzkopp Geschrieben 17. April 2003 Geschrieben 17. April 2003 Es gibt keine #defines vür VK_A bis VK_Z. Stattdessen musst du 'A' bis 'Z' verwenden. Großbuchstaben :mod: 97 ist ein 'a' (Kleinbuchstabe -> anderer ASCII-Code).
Guybrush Threepwood Geschrieben 17. April 2003 Autor Geschrieben 17. April 2003 Achso... Komischerweise hatte er aber den Ascii Code von einem 'A' wenn ich ein 'a' eingegeben hab. Ich bin jetzt einfach hingegangen und hab im Debuger gekuckt welchen Wert wParam hat wenn ich die # drücke und den dann angegeben. Ich weiß zwar nicht wieso bei der Raute der Code 191 ist, aber hauptsache es geht. Danke! Guybrush
Klotzkopp Geschrieben 17. April 2003 Geschrieben 17. April 2003 Original geschrieben von Guybrush Threepwood Komischerweise hatte er aber den Ascii Code von einem 'A' wenn ich ein 'a' eingegeben hab.Die VK-Codes beziehen sich auf Tasten, nicht auf Zeichen. Man musste sich also für einen ASCII-Code entscheiden. Ich weiß zwar nicht wieso bei der Raute der Code 191 ist, aber hauptsache es geht.Das ist VK_OEM_2, es kann also sein, dass ein anderer Tastaturtreiber einen anderen Wert für die #-Taste liefert. Kannst du nicht WM_CHAR abfangen? Da sollte im WPARAM der ASCII-Code drinstehen.
Guybrush Threepwood Geschrieben 17. April 2003 Autor Geschrieben 17. April 2003 Jepp, mit WM_CHAR kann ich den Ascii Code (35) angeben. Danke!! Gruß Guybrush
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden