Ergebnis 1 bis 3 von 3

[C#] Direkt auf Desktop zeichnen

  1. #1 Zitieren
    Demigod Avatar von Sumpfkrautjunkie
    Registriert seit
    Nov 2004
    Ort
    München
    Beiträge
    9.108
    Hi,
    ich habe folgendes Problem:
    Ich möchte mit c# eine Art HUD direkt auf den Desktop zeichnen:
    Wenn also der Bildschirminhalt gezeichnet wurde, sollen noch meine Bilder/Linien darübergezeichnet werden.
    Wenn ich mich nicht irre müsste ich nur den Desktop als Zeichenfeld bestimmen, aber wie mache ich das?
    Muss ich zum Zeichnen auf den Desktop noch etwas anderes beachten?

    (Google brachte nichts wirklich Brauchbares (wahrscheinlich weil ich nicht genau weiß, nach welchen Begriffen ich suchen soll))

    Schon mal vielen Dank im Voraus für die Hilfe
    Sumpfkrautjunkie ist offline

  2. #2 Zitieren
    Demigod Avatar von Sumpfkrautjunkie
    Registriert seit
    Nov 2004
    Ort
    München
    Beiträge
    9.108
    Okay, ich habs geschafft was zu zeichnen:

    PHP-Code:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;

    namespace 
    TastaturVisualizer
    {

       

        public 
    partial class Form1 Form
        
    {
            public 
    Form1()
            {
                
    InitializeComponent();
                
    this.SetStyle(ControlStyles.AllPaintingInWmPaint ControlStyles.UserPaint ControlStyles.DoubleBuffertrue);
            }

            private 
    void Form1_Load(object senderEventArgs e)
            {
                
            }

            private 
    void timer1_Tick(object senderEventArgs e)
            {

                
    IntPtr deskDC User32.GetDC(IntPtr.Zero);
                
                
    Graphics g Graphics.FromHdc(deskDC);
                
                


            
                
    Pen p = new Pen(Color.FromArgb(10000), 10);
                
    g.DrawLine(p55300300);
                
    User32.ReleaseDC(0deskDC);
            }

            private 
    void button1_Click(object senderEventArgs e)
            {
               
            }
        }
        
    #region User32
        
    internal class User32
        
    {

            [
    DllImport("user32")]
            
    internal static extern IntPtr GetDC(IntPtr hwnd);

            [
    DllImport("User32.dll")]
            
    internal static extern void ReleaseDC(int hwndIntPtr hdc);

        }
        
    #endregion

    Doch es gibt 2 Probleme:
    a) wenn ich ein Fenster unter dem Strich hindurchziehe, bleibt ein Strich auf dem Fenster zurück, bis es sich neuzeichnet. Ich nehme an, ich muss vor der Zeichenanweisung des Strichs alle offenen/sichtbaren Fenster repainten lassen. Doch wie bestimme ich alle offenen/sichtbaren Fenster?

    b) Wenn sich die Fenster unter dem Strich neuzeichnen, dann flackert der Strich. Wie kann ich das unterbinden, bzw den Strich mit Doublebuffering zeichnen?

    Edit: Okay gegen a) hab ich folgendes gefunden:
    PHP-Code:
     User32.InvalidateRect(IntPtr.ZeroIntPtr.Zerotrue);
    ...
     [
    DllImport("user32.dll")]
            
    internal static extern bool InvalidateRect(IntPtr hWndIntPtr lpRectbool bErase); 
    Allerdings flackert das wie irre
    Sumpfkrautjunkie ist offline Geändert von Sumpfkrautjunkie (06.04.2008 um 15:07 Uhr)

  3. #3 Zitieren
    Einmalposter
    Registriert seit
    May 2011
    Beiträge
    1
    Hii,

    Das mit dem direkten Zeichnen hast du schon gut hingekriegt.

    Und nun zu deinem Problem mit dem "flackern":
    Was du brauchst ist ein MouseHook - sobald die maus bewegt wird (egal wo) bekommst du ein event, das fängst du ab und ziechnest darin deinen Pfad neu.

    hier ein link: http://blog.bee-eee.com/2008/01/04/c...-on-the-mouse/

    zur hilfe für die Verwendung: WH_MOUSE_LL = 14

    lg POINT
    POINT ist offline

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •