C# - Rysowanie po pulpicie

0

Mam taki kod:

 
 IntPtr desktop = GetDC(IntPtr.Zero);
 Graphics g = Graphics.FromHdc(desktop);
                       
 // Create string to draw.
 String drawString = text;
 // Create font and brush.
 Font drawFont = new Font("Arial", 16);
 SolidBrush drawBrush = new SolidBrush(Color.White);
 // Create point for upper-left corner of drawing.
 float x = 150.0F;
 float y = 50.0F;
 // Set format of string.
 StringFormat drawFormat = new StringFormat();
 //drawFormat.FormatFlags = StringFormatFlags.DirectionVertical;
 // Draw string to screen.
 g.DrawString(drawString, drawFont, drawBrush, x, y, drawFormat);
            
 ReleaseDC(desktop);

Działa, tylko rysuje mi po całym ekranie. Zależy mi, żeby program rysował tylko po pulpicie(konkretnie po tapecie, bez zamazywania ikon itd.). Jak pobrać uchwyt do pulpitu a nie całego ekranu? (Zaczynam dopiero naukę C#).

0

To nie jest dobra metoda na rysowanie po pulpicie. Mógłbyś co prawda dostać się do uchwytu kontrolki pulpitu (tutaj jest pokazane jak się do niej dostać), ale to dość problematyczne rozwiązanie - musisz zająć się poprawnym odmalowywaniem itd.
Lepiej będzie stworzyć własne, przezroczyste okno (np. z pomocą layered window) i ustawić jego parent na kontrolkę pulpitu (tą, którą można znaleźć w linku powyżej).

0

W sumie nie pomyślałem żeby użyć pulpit jako parent, to będzie nawet wygodniejsze rozwiązanie :)

Postanowiłem "przenieść" panel według sposobu opisanego w linku, jednak on po prostu znika gdzieś :|

IntPtr HWND = FindWindow("Progman", null);
HWND = GetWindow(HWND, GetWindow_Cmd.GW_CHILD);
HWND = GetWindow(HWND, GetWindow_Cmd.GW_CHILD);
desktop = HWND;

panel1.Parent = System.Windows.Forms.Control.FromHandle(desktop);

Rysowanie z tym samym uchwytem działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1