none
Esta mal el mensaje proveniente del raton? RRS feed

  • Pregunta

  • Buenas a todos.!

    Estoy empezando a manejar el api de windows y tengo una pregunta de algo que me llamo bastante la atencion, cuando proceso un mensaje de que se hizco un clicl el WPARAM trae consigo una informacion extra como por ejemplo MK_CONTROL, MK_RBUTTON etc, hice una pequeña comparación para probar cuando se habia presionado la tecla ctrl y el click derecho

    if (LOWORD(wparam) == MK_CONTROL)
      ....

    para mi sorpresa no pasaba nada.. me puse a depurar un momento cuando veo algo curioso cuando presiono control y doy click el mensaje que trae (recordando que WPARAM es size_t) veo que es un 10 y cuando veo mi cabezera MK_CONTROL no es 10 sino que es 0x0008 osea 8 y no 10, y asi segui depurando y observando el mensaje que traia y los numeros no coinciden con lo que realmente trae el mensaje.. uso Visual studio professional 2008.. entonces que pasa aqui? supongo que es aventurado pensar en un error, mas bien y lo mas probable es que me este equivocando en algo, agradeceria sacarme de esta confunsión

    lunes, 4 de enero de 2010 19:27

Respuestas

  • Lo estás haciendo mal. 

    El código debería ser algo así:

    if ((LOWORD(wparam)&MK_CONTROL)!=0)
    {
    }

    Ten en cuenta que wParam podría llevar otros bits codificados, por lo que si fuera así tu código sería falso aunque estuviera el bit de la tecla de control a uno.

    Sin embargo, con la forma en que te lo pongo yo, haces un AND lógico con el bit. De este modo pones a cero todos los bits menos el que te interesa, que se quedará a 1 si ya lo estaba o seguirá a 0 si no. Por lo tanto, el resultado de la AND será o bien cero cuando no se haya presionado control o bien diferente de cero cuando sí.

    Visita mi blog sobre desarrollo: http://geeks.ms/blogs/rfog/
    martes, 5 de enero de 2010 16:44
    Moderador

Todas las respuestas

  • Lo estás haciendo mal. 

    El código debería ser algo así:

    if ((LOWORD(wparam)&MK_CONTROL)!=0)
    {
    }

    Ten en cuenta que wParam podría llevar otros bits codificados, por lo que si fuera así tu código sería falso aunque estuviera el bit de la tecla de control a uno.

    Sin embargo, con la forma en que te lo pongo yo, haces un AND lógico con el bit. De este modo pones a cero todos los bits menos el que te interesa, que se quedará a 1 si ya lo estaba o seguirá a 0 si no. Por lo tanto, el resultado de la AND será o bien cero cuando no se haya presionado control o bien diferente de cero cuando sí.

    Visita mi blog sobre desarrollo: http://geeks.ms/blogs/rfog/
    martes, 5 de enero de 2010 16:44
    Moderador
  • muchisimas gracias.
    jueves, 7 de enero de 2010 22:32