2016-02-05 5 views
-1

Я пытаюсь нарисовать прямоугольник прямо на рабочем столе с помощью C#. После нахождения некоторых решений я получил:Рисунок на рабочем столе с использованием C#

using System; 
using System.Drawing; 
using System.Runtime.InteropServices; 
using System.Windows.Forms; 

namespace Test 
{ 
    public partial class Form1 : Form 
    { 
     [DllImport("User32.dll")] 
     public static extern IntPtr GetDC(IntPtr hwnd); 
     [DllImport("User32.dll")] 

     static extern int ReleaseDC(IntPtr hwnd, IntPtr dc); 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      myFunc(); 
     } 

     public void myFunc() 
     { 
      IntPtr desktop = GetDC(IntPtr.Zero); 
      using (Graphics g = Graphics.FromHdc(desktop)) 
      { 
       g.FillRectangle(Brushes.Red, 0, 0, 100, 100); 
      } 
      ReleaseDC(IntPtr.Zero, desktop); 
     } 
    } 
} 

Но когда я запустил его, я ничего не получил на своем экране. Может ли кто-нибудь помочь мне узнать, какая часть идет не так? Это будет высоко ценится!

ответ

0

вероятно окна будут успокоили экран, и именно поэтому вы не видите прямоугольник экрана.

Данное предложение не может быть идеальным решением, но это может помочь вам заставить ваш код работать.

Добавить обработчик краски в форму, как @vivek Верма предложил и переместить код внутри этого обработчика краски

private void Form1_Paint(object sender, PaintEventArgs e) 
     { 
      IntPtr desktop = GetDC(IntPtr.Zero); 
      using (Graphics g = Graphics.FromHdc(desktop)) 
      { 
       g.FillRectangle(Brushes.Red, 0, 0, 100, 100); 
      } 
      ReleaseDC(IntPtr.Zero, desktop); 
     } 

Это позволит сделать прямоугольник быть перерисованы в экране, когда ваша форма будет перекрашен. Но помните, что ваш рисунок на экране исчезнет, ​​когда экран будет обновлен окнами.

EDIT: Существует также хороший пост здесь draw on screen without form, который предлагает альтернативное решение использования формы без полей.

+0

Работа без границ, но мне все же интересно, почему метод кулака не вступает в силу. Я перемещаю коды внутри Form1_Paint и добавляю на него слушателя. Но ничего не увидишь :(Наконец, признай свой ответ! – River

0

Для этого вам не нужен DLL-импорт. Используйте событие формы краски и получить графический объект, как это:

private void Form1_Paint(object sender, PaintEventArgs e) 
{ 
    e.Graphics.DrawRectangle(new Pen(Color.Black,3),x,y,width,height); 
} 
+0

Я хочу нарисовать прямо на рабочем столе Windows. Есть ли все равно, чтобы достичь этого в C#? thx для вашего ответа. – River

 Смежные вопросы

  • Нет связанных вопросов^_^