Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Востановление объекта Graphics 
:(
    Опции темы
dj100500
Дата 4.7.2012, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 9.10.2010

Репутация: нет
Всего: нет



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


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0659 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.