Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Востановление объекта Graphics


Автор: dj100500 4.7.2012, 21:38
Я рисую крестик на рабочем столе потом отрисовываю прямоугольник от центра крестика до курсора по MouseMove с помошью Graphics, и в итоге у меня куча прямоугольников рисуется, а мне надо чтоб крестик остовался, а прямоугольник только свежий был.
Я попытался вот так, но ничего не вышло(Код немного кривоват так как находится в стадии активной перекройки).
Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Text;
using System.Windows.Forms;
using Gma.UserActivityMonitor;
namespace ScreenShotMe
{
    public partial class ScreenForm : Form
    {
        private Point FirstClickPoint = new Point();
        private Graphics g;
        private GraphicsState gs;
        public ScreenForm()
        {
            InitializeComponent();
            this.Size = Screen.PrimaryScreen.Bounds.Size;
            this.LostFocus += new EventHandler(ScreenForm_LostFocus);
            this.MouseClick += new MouseEventHandler(ScreenForm_MouseClick);
            this.MouseMove += new MouseEventHandler(ScreenForm_MouseMove);
            g = Graphics.FromHwnd(NativeMethods.GetDesktopWindow());
        }

        void ScreenForm_MouseMove(object sender, MouseEventArgs e)
        {
            if (FirstClickPoint == Point.Empty)
                return; 
           Pen pen = new Pen(Color.Red, 1.5f);
           g.Restore(gs);
           g.Save();
           g.DrawRectangle(pen,
               new Rectangle(FirstClickPoint, Util.GetRectSize(FirstClickPoint, e.Location)));
        }

        void ScreenForm_MouseClick(object sender, MouseEventArgs e)
        {
            FirstClickPoint = e.Location;
            DrawClickPoint(FirstClickPoint);
        }
        void DrawClickPoint(Point p1)
        {
            Pen pen = new Pen(Color.Red, 3);
            g.DrawLine(pen, new Point(p1.X - 30, p1.Y), new Point(p1.X + 30, p1.Y));
            g.DrawLine(pen, new Point(p1.X, p1.Y + 30), new Point(p1.X, p1.Y - 30));
            gs = g.Save();
            Util.Log("Крестик отрисовала!");
        }
        void ScreenForm_LostFocus(object sender, EventArgs e)
        {
            this.Focus();
        }
    }
}


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)