Я рисую крестик на рабочем столе потом отрисовываю прямоугольник от центра крестика до курсора по 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(); } } }
|
|