Lo que hace la media 0x80 código cuando se refiere a los controles del teclado
Pregunta
lo hace la media 0x80 código cuando se refiere a los controles de teclado en el entorno Windows de C ++?
Por ejemplo,
if(GetKeyState('K') & 0x80) {
//do something
}
Gracias a todos!
No hay solución correcta
Otros consejos
Actualizar
Una ráfaga de downvotes me impulsó a investigar más a fondo. Así es como los valores de retorno (en hexadecimal) de edificaciones GetKeyState
. No acabo de obtener la propiedad de palanca de una llave como k
pero estoy asumiendo que hay algún estado predeterminado se cambia de.
0 Default State, key up
ff80 Default state, key down
1 Toggled, key up
ff81 Toggled, key down
Así se añade 0xff80
siempre que las necesidades de orden superior bit a activar y el bit de orden inferior tiene sentido. Así que ahora sabemos por qué las obras de aproximación 0x80
--- desde el bit de orden del byte inferior se establece también!
Respuesta Viejo
GetKeyState devuelve un SHORT
donde si el bit de orden superior es 1
que significa que la clave es hacia arriba. La operación AND bit a bit con 0x80
cheques sólo si ese bit es 1
ya que en 0x80
binario es 10000000
.
Por lo tanto, la declaración GetKeyState('K') & 0x80
volvería 0x80
si el bit de orden superior del valor devuelto por GetKeyState('K')
es 1
y 0
si el bit de orden superior es 0
.
El href="http://msdn.microsoft.com/en-us/library/ms646301%28VS.85%29.aspx" rel="nofollow noreferrer"> documentación estados:
Si el bit de orden superior es 1, la clave es abajo; de lo contrario, le corresponde.
bit a bit y con 0x80 le da el bit de orden superior, los cheques if
si el resultado es cero o no cero y en los controles de la esencia del valor de ese bit.
Esta comprobación sin embargo parece un error, ya vuelve GetKeyState()
un SHORT
y para comprobar el bit de orden superior de un corto que necesita a nivel de bits y con 0x8000.
Así que le sugiero que consulte el valor de retorno con un depurador y verificar cómo funciona en realidad.
Creo que te refieres 0x8000, 0x80 no. Si ese es el caso, debe consultar la documentación ( http : //msdn.microsoft.com/en-us/library/ms646301 (VS.85) .aspx ) que tiene la siguiente que decir sobre el valor de retorno de GetKeyState: -
El valor de retorno especifica el estado de la tecla virtual especificada, de la siguiente manera:
• Si el bit de orden superior es 1, la clave es abajo; de lo contrario, le corresponde. • Si el bit de orden inferior es 1, se activa la tecla. Una de las claves, tales como la tecla de bloqueo de mayúsculas, se activa si está activada. La clave está apagado y untoggled si el bit de orden inferior es 0. A toggle luz indicadora de llave (si los hay) en el teclado estará en cuando se activa la llave, y cuando la clave es untoggled.
0x80 no significa nada por lo que yo sé, aunque
De acuerdo con la documentación
El valor de retorno especifica el estado de la tecla virtual especificada:
Si el bit de orden superior es 1, la clave es abajo; de lo contrario, le corresponde.
Si el bit de bajo orden es 1, se puede cambiar entre la llave. Una clave, tales como la tecla CAPS LOCK, se activa si está activada. La clave está apagado y untoggled si el bit de orden inferior es 0. A toggle luz indicadora de llave (si los hay) en el teclado estará en cuando se activa la llave, y cuando la clave es untoggled.
Tal vez con una clave no conmutable (por ejemplo, una 'K'), el bajo-orden de (término ambiguo - tal vez quiere decir 0x0080) y de orden superior (0x8000) bits hacen lo mismo cosa?