Mauskoordinaten im Fenster ausgeben



  • Ist auch alles noch sehr unsauber bzw. unschön, aber meinst du irgendwie so:

    #include<windows.h> 
    #include<string.h> 
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); 
    
    void groesse(int yPos, int &y); 
    
    HWND button(HWND hWnd, int x, int y); 
    
    void move(int laenge, int breite, HWND hWnd); 
    
    HINSTANCE hInstGlobal; 
    
    int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 
    { 
    		const char szT[] = "Steuerelemente"; 
    
        hInstGlobal = hInstance; 
    
        WNDCLASS wc; 
    
        HWND hWnd; 
    
        MSG msg; 
    
        wc.cbClsExtra = 0; 
        wc.cbWndExtra = 0; 
        wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); 
        wc.hCursor = LoadCursor(NULL, IDC_ARROW); 
        wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); 
        wc.hInstance = hInstance; 
        wc.lpfnWndProc = WndProc; 
        wc.lpszClassName = "WinProg"; 
        wc.lpszMenuName = 0; 
        wc.style = 0; 
    
        RegisterClass(&wc); 
    
        hWnd = CreateWindow("WinProg", szT, WS_OVERLAPPEDWINDOW, 0, 0, 500, 500, NULL, NULL, hInstance, NULL); 
    
        ShowWindow(hWnd, nCmdShow); 
    
        UpdateWindow(hWnd); 
    
        while(GetMessage(&msg, NULL, 0, 0)) 
        { 
            DispatchMessage(&msg); 
        } 
    
        return msg.wParam; 
    } 
    
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 
    { 
            static int xPos = 0;  
            static int yPos = 0; 
    
            static int x; 
            static int y; 
    
            char xPosc[5] = {0}; 
            char yPosc[5] = {0}; 
    
            static int yy = 150; 
            static int xx = 80; 
    
            static HWND hButton; 
    
        switch (message) 
        { 
    
        case WM_CREATE: 
            x = 140; 
            y = 20; 
            hButton = button(hWnd, x, y); 
            ShowWindow(hButton, TRUE); 
            return 0; 
    
        case WM_MOUSEMOVE: 
            xPos = LOWORD(lParam);  // horizontal position of cursor  
            yPos = HIWORD(lParam);  // vertical position of cursor  
    
            move(xPos/10, yPos/10, hButton); 
           //groesse(yPos, y); 
    
            InvalidateRect(hWnd,NULL, TRUE); 
            //InvalidateRect(hButton, NULL, NULL); 
    
            return 0; 
    
        case WM_PAINT: 
    
            HDC hdc; 
            PAINTSTRUCT ps; 
    
    		wsprintf(xPosc, "%i", xPos);  
            wsprintf(yPosc, "%i", yPos); 
    
            hdc = BeginPaint(hWnd, &ps); 
    
            TextOut(hdc, 10, 20, "xPos:", 5); 
            TextOut(hdc, 10, 40, "yPos:", 5); 
            TextOut(hdc, 50, 20, xPosc, strlen(xPosc)); 
            TextOut(hdc, 50, 40, yPosc, strlen(yPosc)); 
    
            EndPaint(hWnd, &ps); 
    
            return 0; 
    
        case WM_DESTROY: 
    
            PostQuitMessage(0); 
    
            return 0; 
    
        default: 
    
            return DefWindowProc(hWnd, message, wParam, lParam); 
        } 
    } 
    
    void move(int laenge, int breite, HWND hButton) 
    { 
        MoveWindow(hButton, 80, 150, laenge, breite, FALSE); 
    } 
    
    void groesse(int yPos, int &y) 
    { 
    
        if(yPos > 300) 
        {y = 150;} 
        else 
        {y = 20;} 
    
    } 
    
    HWND button(HWND hWnd, int x, int y) 
    { 
        return CreateWindow("Button", "", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,  
                            80, 150, x, y, hWnd, (HMENU) 1, hInstGlobal, NULL); 
    
    }
    


  • Im Prinzip schon, danke
    Gute lösung mit der Button Funktion (Return)

    Bei Mausbewegung erklärst du ja das Hauptfenster für ungültig(hWnd).
    Wieso nicht den Button?



  • Wozu denn? Es geht doch eigentlich hauptäschlich darum, dass die Maus-Position neu ins Fenster geschrieben werden muss 😉



  • was soll die move() funktion???



  • es geht um die variable grösse des buttons, die koordinaten hab ich nur um die LO- HiWORD Makros zu testen



  • Dann kannst du das InvalidateRect ganz weglassen und bei MoveWindow für den letzten Parameter TRUE einsetzen 😉



  • Is ja klasse, mein "fast" eigenes Winapiprog ist (schonwieder) "fast" fertig.

    Hab mal was über buffer gelesen, mal gucken ob ich das finde


Anmelden zum Antworten