Maus einlesen - Win32 Anwendung



  • Hallo, ich programmiere schon länger in C++. Ich weiß auch wie ich einzelne Tasten mit WM_Keydown einlesen kann. Jetzt interessiere ich mich dafür, wie ich die Mausposition und das Klicken der linken/ rechten Maustaste einlesen kann. Wäre echt nett wenn mir, da einer ein Beispiel geben könnte.

    Mfg Peta

    Mein Quellcode zum Erstellen eines Fensters:

    #include "stdafx.h"
    
    HWND hWnd = 0;
    
    int WINAPI WinMain(HINSTANCE hInstance,     
                       HINSTANCE hPrevInstance, 
                       LPSTR lpCmdLine,         
                       int nCmdShow)            
    {   
        hWnd = CreateMainWindow(hInstance);
        if(0 == hWnd)
        {
            MessageBox(0,"Fehler","Fehler",MB_OK);
            return 0;
        }
        MSG msg;
        while(GetMessage(&msg,NULL,0,0))
    	{
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
        }
    	return 0;
    }
    
    HWND CreateMainWindow(HINSTANCE hInstance)
    {
        WNDCLASSEX wndClass;              
        wndClass.cbSize        = sizeof(WNDCLASSEX);         
        wndClass.style         = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW; 
        wndClass.lpfnWndProc   = WindowFunc;              
        wndClass.cbClsExtra    = 0;                     
        wndClass.cbWndExtra    = 0;                     
        wndClass.hInstance     = hInstance;             
        wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 
        wndClass.hCursor       = LoadCursor(NULL, IDC_ARROW); 
        wndClass.lpszMenuName  = NULL;                        
        wndClass.lpszClassName = "WindowClass";               
        wndClass.hIcon         = LoadIcon(NULL, IDI_WINLOGO);
        wndClass.hIconSm       = LoadIcon(NULL, IDI_WINLOGO);
        RegisterClassEx(&wndClass);
        return CreateWindowEx(NULL, "WindowClass", "Ein einfaches Fenster", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0, 0, 400, 300, NULL, NULL, hInstance, NULL);
    }
    LRESULT CALLBACK WindowFunc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
        switch(msg)
        {
            case WM_DESTROY:
                        PostQuitMessage(0);
                        return 0;
                    break;
    
            case WM_PAINT:
                        PAINTSTRUCT ps;
                        HDC hDC;
                        hDC = BeginPaint(hWnd,&ps);    
    
    //Achtung hier beginnt der Bereich zum Zeichnen
    
    //Achtung hier endet der Bereich zum Zeichnen
    
                        EndPaint(hWnd,&ps);
    
                        return 0;
                    break;
        }
    
        return (DefWindowProc(hwnd, msg, wParam, lParam));
    }
    


  • Dazu gibts zwei Events: WM_SETCURSOR und WM_MOUSEMOVE.

    Mittels GetCursorPos() kannst du passend dazu die aktuelle Position des Cursors auf dem Bildschirm feststellen.



  • Könntest du dazu auch noch ein Beispiel geben? Wäre echt nett.

    Mfg Peta



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hier im WinAPI-Forum SuFu benutzen ... da findest du mehr als du lesen kannst ...



  • Ich hab jetzt hier im WinAPI-Forum das SuFu benutzt und frage mich wieso das immernoch nicht geht, bei hilfe bin ich sehr dankbar.

    case WM_LBUTTONDOWN:
    
    	xPos = LOWORD(lParam);
    	yPos = HIWORD(lParam);
    

    Die Fehler sind:
    1. Nichtaufgeloestes externes Symbol _main
    2. 1 unaufgeloeste externe Verweise

    Mfg Peta



  • du baust ne konsolenanwendung, bau mal ne subsystem:windoof anwendung 🕶



  • Hallo Peta,

    ich bin C++Anfänger.
    kannst dumir bitte mit der WM_Keydown ein beispiel code zeigen.

    ich möchte eventuel ein dll erzeugen und in Excel vba es anwenden.

    nedim.oezbey@aee-inova.de

    mfg
    Nedim

    Peta schrieb:

    Hallo, ich programmiere schon länger in C++. Ich weiß auch wie ich einzelne Tasten mit WM_Keydown einlesen kann. Jetzt interessiere ich mich dafür, wie ich die Mausposition und das Klicken der linken/ rechten Maustaste einlesen kann. Wäre echt nett wenn mir, da einer ein Beispiel geben könnte.

    Mfg Peta

    Mein Quellcode zum Erstellen eines Fensters:

    #include "stdafx.h"
    
    HWND hWnd = 0;
    
    int WINAPI WinMain(HINSTANCE hInstance,     
                       HINSTANCE hPrevInstance, 
                       LPSTR lpCmdLine,         
                       int nCmdShow)            
    {   
        hWnd = CreateMainWindow(hInstance);
        if(0 == hWnd)
        {
            MessageBox(0,"Fehler","Fehler",MB_OK);
            return 0;
        }
        MSG msg;
        while(GetMessage(&msg,NULL,0,0))
    	{
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
        }
    	return 0;
    }
    
    HWND CreateMainWindow(HINSTANCE hInstance)
    {
        WNDCLASSEX wndClass;              
        wndClass.cbSize        = sizeof(WNDCLASSEX);         
        wndClass.style         = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW; 
        wndClass.lpfnWndProc   = WindowFunc;              
        wndClass.cbClsExtra    = 0;                     
        wndClass.cbWndExtra    = 0;                     
        wndClass.hInstance     = hInstance;             
        wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 
        wndClass.hCursor       = LoadCursor(NULL, IDC_ARROW); 
        wndClass.lpszMenuName  = NULL;                        
        wndClass.lpszClassName = "WindowClass";               
        wndClass.hIcon         = LoadIcon(NULL, IDI_WINLOGO);
        wndClass.hIconSm       = LoadIcon(NULL, IDI_WINLOGO);
        RegisterClassEx(&wndClass);
        return CreateWindowEx(NULL, "WindowClass", "Ein einfaches Fenster", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0, 0, 400, 300, NULL, NULL, hInstance, NULL);
    }
    LRESULT CALLBACK WindowFunc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
        switch(msg)
        {
            case WM_DESTROY:
                        PostQuitMessage(0);
                        return 0;
                    break;
        
            case WM_PAINT:
                        PAINTSTRUCT ps;
                        HDC hDC;
                        hDC = BeginPaint(hWnd,&ps);    
    
    //Achtung hier beginnt der Bereich zum Zeichnen
    
    //Achtung hier endet der Bereich zum Zeichnen
                        
                        EndPaint(hWnd,&ps);
                        
                        return 0;
                    break;
        }
    
        return (DefWindowProc(hwnd, msg, wParam, lParam));
    }
    

Anmelden zum Antworten