Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Xajorkith en 8 Abril 2016, 13:29 pm



Título: Intentando pasar de PIC a windows....
Publicado por: Xajorkith en 8 Abril 2016, 13:29 pm
Hola, enhorabuena por el foro. Llevo un tiempo sin programar y para volver a retomar la programación estoy pasando de los pics a los mini pc, tengo idea de comprar el e9 mni PC, que puede correr ubuntu con 2 gigas, pero como si fuera un stm32 que es el que use inicialmente, abriendo una ventanita con el programa compilado en c y olvidando que hay un sistema operativo por encima ya que en STM32 no hay sistema operativo, solo el programa que grabas en la memoria.

Para empezar he bajado el DEV-C++, la versión 5, y he creado un nuevo proyecto para ventana en windows con un tamaño de 1024x600, que es el tamaño de la pantalla que tendré mas adelante, hasta ahí, todo fácil. (este paso no era mucho reto, lo reconozco)

El programa que tengo para el STM32 es un bucle continuo ejecutando 'aplcaciones' y no hace gran cosa de momento, basicamente pruebas de las funciones creadas, quedó algo incompleto. :(

De windows lo único que necesito es saber la posición del ratón, si se ha pulsado (no necesito el botón derecho ni teclado por que la pantalla táctil no los tiene) y la función para imprimir un pixel, la escritura y los gráficos los hago usando mis rutinas de escritua y dibujo y el teclado lo simulo en un teclado virtual en pantalla.

Para seguir avanzando en windows tengo el bucle típico:
   while(GetMessage(&msg, NULL, 0, 0) > 0) { /* If no error is received... */
       TranslateMessage(&msg); /* Translate key codes to chars if present */
      DispatchMessage(&msg); /* Send it to WndProc */
   }

Supongo que todo el tema de variables, estructuras y funciones no varia de un entorno a otro.
¿Pero como leo la posición del ratón, compruebo el clic, y pinto un pixel?
¿Tengo que hacerlo descifrando lo recibido de get, traduciendo con translate a ver que mensaje es y enviando un pixel usando dispatch con alguna estructura específica como mensaje? ¿No hay funciones específicas en alguna librería? ¿O llamadas concretas a get, translate y dispatch?

El programa que tengo solo usa esas tres funciones del sistema, así las modificaciones son mínimas para migrar a cualquier micro.

Agradezco cualquier ayuda.
Gracias.



Título: Re: Intentando pasar de PIC a windows....
Publicado por: ivancea96 en 9 Abril 2016, 16:39 pm
Si quieres lgo simple, y coordenadas de toda la pantalla, puedes usar las funciones:
GetCursorPos (https://msdn.microsoft.com/en-us/library/windows/desktop/ms648390(v=vs.85).aspx), para sacar la posición del ratón.
GetAsyncKeyState (https://msdn.microsoft.com/en-us/library/windows/desktop/ms646293.aspx), para ver si está pulksado el botón del ratón (o de cualuiqer tecla)


Título: Re: Intentando pasar de PIC a windows....
Publicado por: Xajorkith en 11 Abril 2016, 13:03 pm
Perfecto Cox66, va de lujo, en nada está leído el ratón y su posición, se echa de menos algún ejemplo práctico en la página de Micrsofot, pero bueno, no cuesta mucho.

Se me olvidó preguntar como obtener el tiempo con milisegundos para las sincrinzaciones y el control del tiempo. Si lo tienes a mano ponmelo, al final he optado por una aplicación de consola con la librería graphics. No es lo mas elegante, pero pa ir tirando me vale. La semana que viene empezaré a migrar la aplicación y cuando haya algo operativo os enviaré una muestra a ver que os parece.


Título: Re: Intentando pasar de PIC a windows....
Publicado por: ivancea96 en 11 Abril 2016, 13:30 pm
De la librería time.h en C (o ctime en C++), tienes la función clock(). Retorna el tiempo que lleva el programa en clocks. Para pasarlo a segundos, divides entre CLOCKS_PER_SEC. Si quieres milisegundos, primero multiplicalo por 1000.

Código
  1. clock_t initial = clock();
  2. // Code
  3. cout << "Milliseconds: " << ((clock()-initial)*1000/CLOCKS_PER_SEC) << " ms" << endl;

Y por cierto, soy ivancea96, no C0x66, que es el logo de mi blog xD