Che cosa significa il codice 0x80 media quando si parla di controlli da tastiera
Domanda
quello che fa il 0x80 codice di media quando ci si riferisce ai controlli da tastiera in ambiente C ++ di Windows?
Ad esempio,
if(GetKeyState('K') & 0x80) {
//do something
}
Grazie a tutti!
Nessuna soluzione corretta
Altri suggerimenti
Aggiorna
Una raffica di downvotes mi ha spinto in indagando questo ulteriore. Ecco come i valori di ritorno (in esadecimale) di opere GetKeyState
. Non riesce quasi mai la proprietà toggle di una chiave, come k
ma sto assumendo c'è qualche stato di default si passa da.
0 Default State, key up
ff80 Default state, key down
1 Toggled, key up
ff81 Toggled, key down
Quindi si aggiunge 0xff80
ogni volta che le esigenze di bit ad alta fine di impostare e il bit di ordine inferiore ha un senso. Così ora sappiamo perché le opere di approccio 0x80
--- in quanto il bit di ordine del byte inferiore è impostato come pure!
Old risposta ??strong>
GetKeyState restituisce un SHORT
in cui se il bit di ordine superiore è 1
significa che la chiave è alto. L'operazione AND bit a bit con 0x80
solo controlla se quel po 'è 1
poiché in 0x80
binario è 10000000
.
Quindi la GetKeyState('K') & 0x80
dichiarazione sarebbe tornato 0x80
se il bit di ordine superiore del valore restituito da GetKeyState('K')
è 1
e 0
se il bit di ordine superiore è 0
.
Il documentazione MSDN della funzione afferma:
Se il bit di ordine superiore è 1, la chiave è giù; in caso contrario, spetta.
bit-saggio e con 0x80 ti dà il bit di ordine alto, i controlli if
se il risultato è zero o diversi da zero e nei controlli essenza il valore di tale bit.
Questo controllo tuttavia appare come un errore, in quanto i rendimenti GetKeyState()
un SHORT
e per controllare il bit di ordine alto di un corto è necessario bit-saggio e con 0x8000.
Quindi Vi suggerisco di controllare il valore di ritorno con un debugger e verificare come funziona in realtà.
Credo che si intende 0x8000, non 0x80. Se questo è il caso, si consiglia di consultare la documentazione ( http : //msdn.microsoft.com/en-us/library/ms646301 (VS.85) aspx ), che ha quanto segue da dire sul valore di ritorno di GetKeyState: -
Il valore restituito specifica lo stato del tasto virtuale specificata, come segue:
• Se il bit di ordine superiore è 1, la chiave è verso il basso; in caso contrario, spetta. • Se il bit di basso ordine è 1, la chiave è attivata. Una chiave, ad esempio il tasto CAPS LOCK è attivata se è acceso. La chiave è spento e untoggled se il bit di ordine inferiore è 0. Un ginocchiera spia del tasto (se presente) sulla tastiera si accende quando il tasto viene attivato, e quando la chiave è untoggled.
0x80 non significa nulla per quanto ne so se
Il valore restituito specifica lo stato del tasto virtuale specificato:
Se il bit di ordine superiore è 1, la chiave è verso il basso; in caso contrario, spetta.
Se il bit di ordine più basso è 1, la chiave viene commutato. Una chiave, ad esempio il tasto CAPS LOCK è attivata se è acceso. La chiave è spento e untoggled se il bit di ordine inferiore è 0. Un ginocchiera spia del tasto (se presente) sulla tastiera si accende quando il tasto viene attivato, e quando la chiave è untoggled.
Forse con una chiave non toggleable (ad esempio una 'K'), il basso per (ambiguo termine - forse significa 0x0080) e di ordine superiore (0x8000) bit fanno lo stesso cosa?