Coordonnees de la souris

Description

Programme qui montre les coordonnes de la souris par rapport a la taille de la fenetre.

Source / Exemple :


#include <windows.h>
#include <stdarg.h>
#include <stdio.h>

// PROTOTYPE
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

// WIN MAIN
int WINAPI WinMain (  HINSTANCE     hInstance,
                      HINSTANCE     hPrevInstance,
                      PSTR          szCmdLine,
                      int           iCmdShow)
{
static char szAppName[] = "Programme d'essai";
HWND        hwnd;
MSG         msg;
WNDCLASSEX  wndclass;

wndclass.cbSize        = sizeof (wndclass);
wndclass.style         = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc   = WndProc;
wndclass.cbClsExtra    = 0;
wndclass.cbWndExtra    = 0;
wndclass.hInstance     = hInstance;
wndclass.hIcon         = LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor       = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)GetStockObject (WHITE_BRUSH);
wndclass.lpszMenuName  = NULL;
wndclass.lpszClassName = szAppName;
wndclass.hIconSm       = LoadIcon(NULL,IDI_APPLICATION);
// on enregistre la classe
RegisterClassEx (&wndclass) ;
// on cree la fenetre
hwnd = CreateWindow (szAppName,
                    "",
                    WS_OVERLAPPEDWINDOW,
                    CW_USEDEFAULT,
                    CW_USEDEFAULT,
                    CW_USEDEFAULT,
                    CW_USEDEFAULT,
                    NULL,
                    NULL,
                    hInstance,
                    NULL) ;
// on dessine et met a jour la fenetre
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
// bouble des messages
while (GetMessage (&msg, NULL, 0, 0))
    {
    TranslateMessage (&msg) ;
    DispatchMessage (&msg) ;
    }
return msg.wParam ;
}
// trace une ligne de (x,y) a (xx,yy)
void line(HDC hdc,int x,int y,int xx,int yy)
  {
  MoveToEx (hdc, x , y ,NULL) ;
  LineTo   (hdc, xx , yy ) ;
  return;
  } 

// WND PROC
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
     {
     static int       cxClient,cyClient,cxMouse,cyMouse;
     switch (iMsg)
          {
          // creation
          case WM_CREATE:
            {
            cxMouse = 0;
            cyMouse = 0;
            return 0;
            }
          // on redimensionne la fenetre
          case WM_SIZE:
            {
            cxClient = LOWORD (lParam) ;
            cyClient = HIWORD (lParam) ;
            return 0 ;
            }
          // on bouge la souris
          case WM_MOUSEMOVE:
            {
            cxMouse = LOWORD (lParam) ;
            cyMouse = HIWORD (lParam) ;
            InvalidateRect(hwnd,NULL,TRUE);
            return 0;
            }
          // on redessine
          case WM_PAINT:
            {
            HDC           hdc;
            PAINTSTRUCT   ps;

            char          buf[256],buf2[256];
            int           len;

	          hdc = BeginPaint (hwnd, &ps);
            // on trace les axes
            line(hdc,cxMouse,0,cxMouse,cyClient);
            line(hdc,0,cyMouse,cxClient,cyMouse);
            // on formate les textes

            len = sprintf(buf,"(  %d / %d  ,  %d / %d  )",cxMouse,cxClient,cyMouse,cyClient);
            // pour le titre de la fentre
            strcpy(buf2,"Coordonnees de la souris : ");
            strcat(buf2,buf);
            
            // on dessine !
            TextOut(hdc,cxMouse+1,cyMouse+1,buf,len);
            SetWindowText(hwnd,buf2);

	          EndPaint (hwnd, &ps) ;
            return 0 ;
            }
          // on quitte le programme
          case WM_DESTROY:
               PostQuitMessage (0) ;
               return 0 ;
          }

     return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
     }

Codes Sources

A voir également