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

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

la documentazione

  

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top