Рисование графики на C # без использования Windows Forms - PullRequest
0 голосов
/ 11 марта 2010

Может ли кто-нибудь предоставить пример для рисования графики без использования Windows Forms? У меня есть приложение, в котором нет окна консоли или формы Windows, но мне нужно нарисовать базовую графику (линии и прямоугольники и т. Д.)

Надеюсь, что это имеет смысл.

Ответы [ 4 ]

5 голосов
/ 11 марта 2010

Это должно дать вам хорошее начало:

  [TestFixture]
  public class DesktopDrawingTests {
    private const int DCX_WINDOW = 0x00000001;
    private const int DCX_CACHE = 0x00000002;
    private const int DCX_LOCKWINDOWUPDATE = 0x00000400;

    [DllImport("user32.dll")]
    private static extern IntPtr GetDesktopWindow();

    [DllImport("user32.dll")]
    private static extern IntPtr GetDCEx(IntPtr hwnd, IntPtr hrgn, uint flags);

    [Test]
    public void TestDrawingOnDesktop() {
      IntPtr hdc = GetDCEx(GetDesktopWindow(),
                           IntPtr.Zero,
                           DCX_WINDOW | DCX_CACHE | DCX_LOCKWINDOWUPDATE);

      using (Graphics g = Graphics.FromHdc(hdc)) {
        g.FillEllipse(Brushes.Red, 0, 0, 400, 400);
      }
    }
  }
3 голосов
/ 11 марта 2010

Как то так?

 using System.Drawing;

 Bitmap bmp = new Bitmap(200, 100);
 Graphics g = Graphics.FromImage(bmp);
 g.DrawLine(Pens.Black, 10, 10, 180, 80);
1 голос
/ 11 марта 2010

Вопрос немного не сфокусирован. В частности - где вы хотите нарисовать линии и прямоугольники? Вообще говоря, вам нужна поверхность для рисования, обычно предоставляемая формой окон.

Откуда возникает необходимость избегать оконных форм?

Вы используете окно другого типа?

Для формы Windows вы можете использовать код, подобный следующему:

namespace WindowsFormsApplication1 {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }

        protected override void OnPaint(PaintEventArgs e) {
            base.OnPaint(e);

            e.Graphics.DrawLine(new Pen(Color.DarkGreen), 1,1, 3, 20 );
            e.Graphics.DrawRectangle(new Pen(Color.Black), 10, 10, 20, 32 );
        }
    }
}

Как правило, это можно сделать с любым объектом, который позволяет получить дескриптор объекта «Графика» (например, принтера).

0 голосов
/ 13 марта 2010

Правильно, я сделал это с формой окна, но сделай фон прозрачным, а затем избавься от всех границ ...

Спасибо за ответы в любом случае ..

J

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...