Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Chase

Alter Hase

  • »Chase« ist der Autor dieses Themas

Beiträge: 753

Wohnort: Nagaoka / Darmstadt / Düsseldorf

Beruf: fauler Studi

  • Private Nachricht senden

11

25.07.2006, 01:55

Nur damit dass jetzt nicht unhoeflich rueberkommt - Ich kam in den letzen Tagen net dazu weiter zu machen.. Also danke fuer Eure Hilfe :)
Patrick's Methode werd ich direkt mal ausprobieren.
Ach ja: Was mach ich denn wenn ich erst zur Compilezeit festlegen will ob ascii oder unicode ? (ich wuerde mal auf irgendwelche makros tippen die gesezt wurden, ich hab mich bei VS einfach auf die Option "Character Set" verlassen)
"Have you tried turning it off and on again?"

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

12

25.07.2006, 08:25

tchar.h einbinden und vor Strings ein _T schreiben, kannst aber auch ein eigenes Makro schreiben das sich ja nach Unicode verhällt.

Chase

Alter Hase

  • »Chase« ist der Autor dieses Themas

Beiträge: 753

Wohnort: Nagaoka / Darmstadt / Düsseldorf

Beruf: fauler Studi

  • Private Nachricht senden

13

05.08.2006, 00:32

Da ich das Problem einfach auf meinen imaginaeren "Problemstack" geschoben habe (:)) grab ich mal diesen Thread wieder aus..

Tja, die ToUnicodeEx() Funktion tut ihren Dienst zwar schon, aber ist nicht genau das was ich brauchte. Sie leifert naemlich nicht den Namen einer Taste, sondern bloss ihren ausgeschriebenen Unicode-Wert. Beispiel: Aus VK_SPACE wird " " und nicht etwa "Space".
Jetzt ueberlege ich, wie man das ganze am Besten selbst schreibt, ohne das die Performance sich verabschiedet. Also Tausend Abfragen kommen nicht in Frage.
Da der DirectInputKey ja eine simple Enumeration ist, bietet sich doch einfach ein Stringarray an.
Oder greift man bei sowas auf Techniken wie Hashing zurueck ?
"Have you tried turning it off and on again?"

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

14

05.08.2006, 13:53

Kann man Performance bei sowas nicht weitgehend vernachlässigen? Oder willste das "live" inner Spielumgebung machen?

Anonymous

unregistriert

15

05.08.2006, 13:59

Chase
Irgendwie guckst Du Dir die Links die ich Dir gebe nicht sorgfältig an. Denn dann hättest Du bei den Gettern direkt: GetKeyNameText gefunden.

Chase

Alter Hase

  • »Chase« ist der Autor dieses Themas

Beiträge: 753

Wohnort: Nagaoka / Darmstadt / Düsseldorf

Beruf: fauler Studi

  • Private Nachricht senden

16

05.08.2006, 15:17

Oh stimmt. Sorry! :?

Kann mir mal jemand mit dem Parameter den die Funktion erwartet auf die Spruenge helfen?

Zitat

lParam
[in] Specifies the second parameter of the keyboard message (such as WM_KEYDOWN) to be processed. The function interprets the following bit positions in the lParam.

16—23
Scan code.


Also der Scancode muss in den Bits 16 bis 23 vorliegen, das heisst doch eigentlich ich muss um 16 Bits left-shiften. Auf long gecastet hab ich auch..

C-/C++-Quelltext

1
GetKeyNameText((long)(toScanCode(code))<<16,temp,8);


Edit: Ok, vergesst es: Der Code liegt natuerlich schon im Scancode vor, und muss nicht nochmal zureck-gemapped werden. Also einfach
((long)code)<<16 und gut ist.
(Ich Trottel ;)) Danke nochmal.
"Have you tried turning it off and on again?"

Anonymous

unregistriert

17

05.08.2006, 15:36

Chase
Total Easy:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <windows.h>

    // Konvertiert Windows Virtual Key Code zu Scan Code 

unsigned long virtual_key_to_scan_code (unsigned long virtual_key) 
{ 
    return (static_cast<unsigned long>(::MapVirtualKeyEx (virtual_key, 0, ::GetKeyboardLayout (::GetCurrentThreadId ())))); 
} 

    // Konvertiert Scan Code zu Windows Virtual Key Code 

unsigned long scan_code_to_virtual_key (unsigned long scan_code) 
{ 
    return (static_cast<unsigned long>(::MapVirtualKeyEx (scan_code, 1, ::GetKeyboardLayout (::GetCurrentThreadId ())))); 
}

int main (void)
{
    wchar_t buffer[512] = L"";

    unsigned long scan_code = virtual_key_to_scan_code (VK_RETURN);

    GetKeyNameTextW (scan_code << 16, buffer, 512);

    ::MessageBoxW (NULL, buffer, L"Taste:", MB_OK);

    return 0;
}

Werbeanzeige