Grafik an den Cursor "binden"



  • Hallo,
    zuerst einmal tut es mir leid für den irreführenden Titel. Ich werde genauer beschreiben, was ich vorhabe.
    Ich habe vor, dass das "Error-Symbol" den Mousecursor verfolgt. Genauer gesagt, dass man damit malen kann.
    Das ganze ist nur ein Spaß für einen Freund von mir. Wie hier : https://prnt.sc/115t7vu

    Bisher habe ich nur die Cursor position. Siehe hier :

    POINT cursorPos;
    	while (true) {
    		int x, y;
    		GetCursorPos(&cursorPos);
    		x = cursorPos.x;
    		y = cursorPos.y;
    
    	}
    

    An diese Position sollte ein Bild gesetzt werden. Wie soll ich da vorgehen ?
    Danke im Voraus.


  • Mod

    Systemabhängig. Welches Betriebssystem?



  • Oha, das ist nicht ganz so einfach....
    Unter Windows funktioniert das Zeichnen eines Fensters so:
    Jedes Fensteranwendung hat mindestens eine MessageQueue, in der Nachrichten für alle möglichen Ereignisse abgelegt werden. Eine Message Pump holt die Nachrichten aus der MQ und sorgt dafür, dass sie behandelt werden. Eine dieser Nachrichten ist WM_PAINT, die dem Fenster sagt, dass es sich neu zeichnen soll. Das Fenster löscht daraufhin normalerweise seinen Hintergrund und zeichnet sich neu. Bei Windows sind alle Controls eigene Fenster, die nur unterschiedliche Eigenschaften haben; ein Button ist genauso ein Fenster wie ein Texteingabefeld oder das umgebende Fenster selbst. Wenn sich ein Fenster neu zeichnet holt es sich seinen Device Context und zeichnet seinen Inhalt in diesen DC. Das tun auch alle Kindfenster. Du kannst auch direkt in den DC eines Fensters zeichnen, das hält aber nur so lange, bis das Fenster eine WM_PAINT Nachricht bekommt und sich dann neu zeichnet. Wenn du möchtest, dass deine Bilder permanent bleiben musst du dich irgendwie in die MQ der Anwendung klinken und die WM_PAINT Nachricht selbst behandeln, um deine Bilder zu zeichnen. Das geht per Subclassing, das Problem wird aber sein, dass du dich in den Prozess einklinken musst, der den Desktop zeichnet, und ob dein Programm entsprechende Berechtigungen hat. Ob das der Windows Explorer ist weiß ich nicht, oder ob noch ein anderer Layer drüber/drunterliegt weiß ich auch nicht. Zumindest gab es mal sowas wie eine Glass Pane.

    Falls die temporäre Lösung reicht:
    Hier gibt´s ein Beispiel, wie man eine Bitmap von der Festplatte lädt und anzeigt. Den Device Context des Desktops bekommst du per GetDC( nullptr ), in den solltest du dann malen können. Ich hab sowas noch nie gemacht und kann mir gut vorstellen, dass Benutzerrechte da eine Rolle spielen und man in diesen DC nicht so einfach malen darf.



  • @SeppJ sagte in Grafik an den Cursor "binden":

    Systemabhängig. Welches Betriebssystem?

    Schau den Code an. Windows. 🤦♂



  • @SeppJ Windows ^^ [ POINTER und GetCursorPos sind ja aus windows.h ]



  • @DocShoe Danke 🙂



  • @DocShoe Mit der DrawIcon - Funktion funktioniert es auch ^^
    Bsp:
    BOOL DrawIcon(
    HDC hDC,
    int X,
    int Y,
    HICON hIcon
    );

    LG


Log in to reply