Mouse in c++

di il
6 risposte

Mouse in c++

Ho fatto un programma ( in modalità testo ) gestionale in C negli anni '80 . Senza uso del mouse .
Ora , in pensione e per diletto , vorrei riprenderlo in C++ inserendo l'utilizzo del mouse .
Le videate che utilizzavo contenevano una serie di campi-di-input accessibili sequenzialmente .
Vorrei , usando il mouse , poter accedere random ai campi-di-input .
Non ho capito come fare affinché il programma recepisca quale campo-di-input scelgo con il mouse
Devo creare finestrelle per ogni campo-di-input ?
Documentazione ( meglio in italiano ) con qualche esempio ?
Grazie .

6 Risposte

  • Re: Mouse in c++

    Sotto Win, con VisualStudio e C++, puoi disegnare l'interfaccia e gestire gli eventi in modo visuale.
    https://docs.microsoft.com/it-it/dotnet/api/system.windows.uielement.mousemove?view=net-5.0
    Le pagine dell'MSDN si aprono con gli esempi in C#, ma puoi cambiare in C++
    MSDN.jpg
    MSDN.jpg

  • Re: Mouse in c++

    Rubik... hai indicato della documentazione per .NET ma lui vuole una soluzione per c/c++ nativo...
  • Re: Mouse in c++

    Se non usi VisualStudio con il C++ sempre sotto win, si può creare una finestra win, con: #include <windows.h>
    Gli IDE producono il codice in automatico.
    Nell'esempio che ti posto il codice per creare una finestra è stato creato da DevC.
    in:
    LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    Devi inserire il codice per gestire i messaggi della finestra, ho inserito il messaggio per distruggere la finestra e il messaggio che intercetta il click del mouse, al click, nella console vengono stampate le coordinate.
    #include <iostream>
    #include <windows.h>
    #define SchermoX 640 // largheza
    #define SchermoY 480 // altezza
    
    /*  Declare Windows procedure, dove intercetterai i tuoi eventi  */
    LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
    
    /*  Make the class name into a global variable  */
    char szClassName[ ] = "WindowsApp";
    
    
    
    int WINAPI WinMain (HINSTANCE hThisInstance,
                        HINSTANCE hPrevInstance,
                        LPSTR lpszArgument,
                        int nFunsterStil)
    
    {
        HWND hwnd;               /* This is the handle for our window */
        MSG messages;            /* Here messages to the application are saved */
        WNDCLASSEX wincl;        /* Data structure for the windowclass */
    
        /* The Window structure */
        wincl.hInstance = hThisInstance;
        wincl.lpszClassName = szClassName;
        wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
        wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
        wincl.cbSize = sizeof (WNDCLASSEX);
    
        /* Use default icon and mouse-pointer */
        wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
        wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
        wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
        wincl.lpszMenuName = NULL;                 /* No menu */
        wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
        wincl.cbWndExtra = 0;                      /* structure or the window instance */
        /* Use Windows's default color as the background of the window */
        wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
    
        /* Register the window class, and if it fails quit the program */
        if (!RegisterClassEx (&wincl))
            return 0;
    
        /* The class is registered, let's create the program*/
        hwnd = CreateWindowEx (
               0,                   /* Extended possibilites for variation */
               szClassName,         /* Classname */
               "Windows App",       /* Title Text */
               WS_OVERLAPPEDWINDOW, /* default window */
               CW_USEDEFAULT,       /* Windows decides the position */
               CW_USEDEFAULT,       /* where the window ends up on the screen */
               SchermoX,                 /* The programs width */
               SchermoY,                 /* and height in pixels */
               HWND_DESKTOP,        /* The window is a child-window to desktop */
               NULL,                /* No menu */
               hThisInstance,       /* Program Instance handler */
               NULL                 /* No Window Creation data */
               );
    
        /* Make the window visible on the screen */
        ShowWindow (hwnd, nFunsterStil);
    
        /* Run the message loop. It will run until GetMessage() returns 0 */
        while (GetMessage (&messages, NULL, 0, 0))
        {
            /* Translate virtual-key messages into character messages */
            TranslateMessage(&messages);
            /* Send message to WindowProcedure */
            DispatchMessage(&messages);
        }
    
        /* The program return-value is 0 - The value that PostQuitMessage() gave */
        return messages.wParam;
    }
    
    
    
    /*  Qui in ogni case l'evento che ti interessa */
    
    LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)                   /* messaggio della finestra */
        {
            case WM_DESTROY:
                PostQuitMessage (0);       /* la finestra è stata chiusa */
                break;
    
            case WM_LBUTTONDOWN: {         /* è sato premuto il tasto sinistro del mouse */
                int x = LOWORD(lParam) , y = HIWORD(lParam); /* lettura coordinate */
    
                printf("click x = %d click y = %d\n",x,y); /* visualizzazione coordinate */
                InvalidateRect(hwnd, (LPCRECT)NULL, (BOOL)NULL);
                } break;
                
            default:                      /* for messages that we don't deal with */
                return DefWindowProc (hwnd, message, wParam, lParam);
        }
    
        return 0;
    }
    
    Questo è solo l'inizio....
  • Re: Mouse in c++

    Rubik ha scritto:


    Se non usi VisualStudio con il C++ sempre sotto win, si può creare una finestra win, con: #include <windows.h>
    Gli IDE producono il codice in automatico.
    @Rubik .. stai facendo confusione.

    VisualStudio è solo un IDE e anche con VisuaStudio è possibile creare un programma in C/C++ nativo (e non .NET).
    Basta scegliere un template per Win32 (a 32 bit) con un progetto "Console" (solo testuale senza supporto grafico, stile MSDOS per capirci) oppure con GUI (con finestre grafiche).

    Se non ho capito male lui vorrebbe utilizzare il mouse in un progetto "Console". Attendiamo chiarimenti.
  • Re: Mouse in c++

    Per un progetto console, le coordinate del mouse sullo schermo:
    
    #include <iostream>
    #include <windows.h>
    
    using namespace std;
    
    int main(){
        POINT aCoor;
    
        while(true) {
            system ("cls");
            GetCursorPos(&aCoor);
            cout << "Posizione x = " << aCoor.x << " y = " << aCoor.y << endl;
        }
    
        return 0;
    }
    

    Per le coordinate riferite alla finestra console:
    
    #include <iostream>
    #include <windows.h>
    
    using namespace std;
    
    int main(){
        SetConsoleTitle("TEST coordinate");
        HWND hwnd;
    
        // attende la creazione della finestra, già 1 millisecondo dovrebbe essere sufficiente
        Sleep(10);
        hwnd = FindWindow(NULL, "TEST coordinate");
        HDC hdc = GetDC(hwnd);
    
        POINT aCoor;
    
        while(true){
            system ("cls");
            GetCursorPos(&aCoor);
            ScreenToClient(hwnd,&aCoor);
    
            cout << "Posizione x = " << aCoor.x << " y = " << aCoor.y << endl;
        }
    
        return 0;
    }
    
  • Re: Mouse in c++

    oregon ha scritto:


    @Rubik .. stai facendo confusione.
    Nessuna confusione il titolo è: Mouse in C++, tutti gli esempi postati sono per rilevare le coordinate del mouse in varie tipologie di situazioni, in ambiente win.
Devi accedere o registrarti per scrivere nel forum
6 risposte