Графический редактор
От: Аноним  
Дата: 06.02.08 09:04
Оценка:
нужно сделать простейший графический редактор — рисование прямоугольников, эллипсов и т.д.
с последующим графическим редактированием, т.е. выделил — появились зоны растяжки (в общем все как обычно)

Как это реализовать — в с# навичок.
Делал подобную вещь на MFC, а как переложить на С# не знаю.

на mfc делал подобное:

class CShape
{

static CShape* New(int type)
{
   switch(type)
   {
   case line:
      return CShapeLine();
   ...
   // и т.д.
   }
}

public bool Create(CWnd *wnd)
{
   // здесь формируем битмат

   while(create)
   {
   GetMessage()

   if(LBUTTONUP)
      OnLButtonUp(...);
   if(MOUSEMOVE)
      OnMouseMove(...);
   и т.д. пока не закончим создание фигуры или не отменим
   }
}

}
Re: Графический редактор
От: OrSol  
Дата: 06.02.08 09:11
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>нужно сделать простейший графический редактор — рисование прямоугольников, эллипсов и т.д.

А>с последующим графическим редактированием, т.е. выделил — появились зоны растяжки (в общем все как обычно)

А>Как это реализовать — в с# навичок.

А>Делал подобную вещь на MFC, а как переложить на С# не знаю.

При помощи GDI+ (System.Drawing.Graphics)
... << RSDN@Home 1.2.0 alpha rev. 787>>
Re: Графический редактор
От: Saruwatari Россия  
Дата: 06.02.08 09:24
Оценка:
Здравствуйте, Аноним, Вы писали:

А>нужно сделать простейший графический редактор — рисование прямоугольников, эллипсов и т.д.

А>с последующим графическим редактированием, т.е. выделил — появились зоны растяжки (в общем все как обычно)

А>Как это реализовать — в с# навичок.


В чем трудности-то?
Re[2]: Графический редактор
От: Аноним  
Дата: 06.02.08 11:33
Оценка:
Здравствуйте, Saruwatari, Вы писали:

А>>Как это реализовать — в с# навичок.


S>В чем трудности-то?


Как мне сделать создание примитива.
где обработать сообщения мыши.
Re[3]: Графический редактор
От: Saruwatari Россия  
Дата: 06.02.08 11:40
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Saruwatari, Вы писали:


А>>>Как это реализовать — в с# навичок.


S>>В чем трудности-то?


А>Как мне сделать создание примитива.

А>где обработать сообщения мыши.

Коротко о мышах: MouseUp, MouseDown, MouseMove той поверхности, на которой рисуешь.
А в чем конкретно сложности создания примитива? Вообще, все нужно рисовать.
Re: Графический редактор
От: EtLIN Беларусь  
Дата: 07.02.08 08:46
Оценка:
Здравствуйте, Аноним, Вы писали:

А>нужно сделать простейший графический редактор — рисование прямоугольников, эллипсов и т.д.

А>с последующим графическим редактированием, т.е. выделил — появились зоны растяжки (в общем все как обычно)

А>Как это реализовать — в с# навичок.

А>Делал подобную вещь на MFC, а как переложить на С# не знаю.

Я вас понял, вы делали "захват" очереди сообщений, для удобной обработки.
Я точно не знаю, т.к. не пробовал, но премеры подобные классу CRectTracker из MFC не видел, вся реализация проходила через отдельные методы OnMouseMove и т.п., что конечно не совсем удобно.

Как я это вижу, вам надо посмотреть в сторону переопределения PreProcessMessage, WndProc и т.п. и код получится более красивым и удоюным в использовании.
<a href="http://www.brainbench.com/transcript.jsp?pid=6696684"><img border='0' src='http://www.brainbench.com/images/certlogo/color/mastercert/csharp.gif'/&gt;&lt;/a&gt;
Re[2]: Графический редактор
От: Saruwatari Россия  
Дата: 07.02.08 17:27
Оценка:
Здравствуйте, EtLIN, Вы писали:

ELI>Здравствуйте, Аноним, Вы писали:


А>>нужно сделать простейший графический редактор — рисование прямоугольников, эллипсов и т.д.

А>>с последующим графическим редактированием, т.е. выделил — появились зоны растяжки (в общем все как обычно)

А>>Как это реализовать — в с# навичок.

А>>Делал подобную вещь на MFC, а как переложить на С# не знаю.

ELI>Я вас понял, вы делали "захват" очереди сообщений, для удобной обработки.

ELI>Я точно не знаю, т.к. не пробовал, но премеры подобные классу CRectTracker из MFC не видел, вся реализация проходила через отдельные методы OnMouseMove и т.п., что конечно не совсем удобно.

ELI>Как я это вижу, вам надо посмотреть в сторону переопределения PreProcessMessage, WndProc и т.п. и код получится более красивым и удоюным в использовании.


Вы предлагаете "пушку", для того, чтобы разобраться с воробьем. На счет элегантности не уверен. Таже фигня получится: "многа букав". В любом случае надо отлавливать (что и так понятно) нажатие, отпуск и передвижение мыши. Чем может быть элегантнее решение писать собственные хэндлеры, чем использование уже готового? Думаю, как раз наоборот. Если считать микросекунды и их брать за основу элегантности, то возможно...
Re[3]: Графический редактор
От: Аноним  
Дата: 07.02.08 19:58
Оценка:
S>Вы предлагаете "пушку", для того, чтобы разобраться с воробьем. На счет элегантности не уверен. Таже фигня получится: "многа букав". В любом случае надо отлавливать (что и так понятно) нажатие, отпуск и передвижение мыши. Чем может быть элегантнее решение писать собственные хэндлеры, чем использование уже готового? Думаю, как раз наоборот. Если считать микросекунды и их брать за основу элегантности, то возможно...

а вы что предлагаете — сделать примитивы(линия, окружность ...) прозрачными контролами и у них обрабатывать мышиные сообщения?
Re[4]: Графический редактор
От: Saruwatari Россия  
Дата: 07.02.08 20:08
Оценка:
Здравствуйте, Аноним, Вы писали:

S>>Вы предлагаете "пушку", для того, чтобы разобраться с воробьем. На счет элегантности не уверен. Таже фигня получится: "многа букав". В любом случае надо отлавливать (что и так понятно) нажатие, отпуск и передвижение мыши. Чем может быть элегантнее решение писать собственные хэндлеры, чем использование уже готового? Думаю, как раз наоборот. Если считать микросекунды и их брать за основу элегантности, то возможно...


А>а вы что предлагаете — сделать примитивы(линия, окружность ...) прозрачными контролами и у них обрабатывать мышиные сообщения?


Это тоже выход, т.к. у них есть такая хорошая вещь как Region.
Но можно и руками рисовать, если не лень писать алгоритм определения принадлежит ли точка окружности (не находится внутри, а именно линии).
Это зависит от того что нужно.
Я же говорю о том, как сам редактор реализовывать, а не рисование.
Re[5]: Графический редактор
От: Аноним  
Дата: 08.02.08 07:27
Оценка:
Здравствуйте, Saruwatari, Вы писали:

S>Я же говорю о том, как сам редактор реализовывать, а не рисование.


а графический редактор это на 90% и есть рисование
хорошо теперь про алгоритм:
допустим есть форма — вы пердлагаете обрабатывать на форме события мыши, а не запутаетесь
для какого примитива обрабатывать — не проще ли сделать каждый примитив классом и в нем определить
процесс создания. а вот как повесить на эти классы обработку мышиных сообщений? Что бы при нажатии
кнопки создавался объект-примитив и уже в нем вести обработку мышиных событий.
Re[3]: Графический редактор
От: EtLIN Беларусь  
Дата: 08.02.08 08:45
Оценка:
Здравствуйте, Saruwatari, Вы писали:

S>Вы предлагаете "пушку", для того, чтобы разобраться с воробьем. На счет элегантности не уверен. Таже фигня получится: "многа букав". В любом случае надо отлавливать (что и так понятно) нажатие, отпуск и передвижение мыши. Чем может быть элегантнее решение писать собственные хэндлеры, чем использование уже готового? Думаю, как раз наоборот. Если считать микросекунды и их брать за основу элегантности, то возможно...


Это ваше субъективное мнение, а это было мое. Какое использовать автор решит сам. Для меня более элегантно, создать класс отвечающий за перемещение каждого примитива с определенным интерфейсом и перехватить только нужные сообщения в одном месте (PreProcessMessage, WndProc), а не разбрасывать по куче методов.
<a href="http://www.brainbench.com/transcript.jsp?pid=6696684"><img border='0' src='http://www.brainbench.com/images/certlogo/color/mastercert/csharp.gif'/&gt;&lt;/a&gt;
Re[4]: Графический редактор
От: Saruwatari Россия  
Дата: 08.02.08 10:40
Оценка:
Здравствуйте, EtLIN, Вы писали:

ELI>Здравствуйте, Saruwatari, Вы писали:


S>>Вы предлагаете "пушку", для того, чтобы разобраться с воробьем. На счет элегантности не уверен. Таже фигня получится: "многа букав". В любом случае надо отлавливать (что и так понятно) нажатие, отпуск и передвижение мыши. Чем может быть элегантнее решение писать собственные хэндлеры, чем использование уже готового? Думаю, как раз наоборот. Если считать микросекунды и их брать за основу элегантности, то возможно...


ELI>Это ваше субъективное мнение, а это было мое. Какое использовать автор решит сам. Для меня более элегантно, создать класс отвечающий за перемещение каждого примитива с определенным интерфейсом и перехватить только нужные сообщения в одном месте (PreProcessMessage, WndProc), а не разбрасывать по куче методов.


Вы в своем методе (PreProcessMessage, WndProc) будете использовать switch, что, по сути, то же самое...
Re[6]: Графический редактор
От: Saruwatari Россия  
Дата: 08.02.08 10:44
Оценка:
Здравствуйте, Аноним, Вы писали:

А>допустим есть форма — вы пердлагаете обрабатывать на форме события мыши, а не запутаетесь

А>для какого примитива обрабатывать — не проще ли сделать каждый примитив классом и в нем определить
А>процесс создания. а вот как повесить на эти классы обработку мышиных сообщений? Что бы при нажатии
А>кнопки создавался объект-примитив и уже в нем вести обработку мышиных событий.

Форма — это холс для рисования, фреймворк в котором рисуют. Ему все равно какой объект рисуется. Он является дистрибъютором собятий мыши между человеком и фигурой и предоставляет сервис для того, чтобы фигуры сами себя отрисовали.
То, что вынаписали очень лизко к использованию наследования от Control. Определите свое рисование контрола, а мышь иперетаскивание объектов уже дело "пары строчек кода". (Если правильно описать, то контрол сам себя будет перетаскивать и останется только наследованиться от него.) Но при такое мподходе вы не управляете полностью отрисовкой объектов, слоями и пр.
Re: Графический редактор
От: _FRED_ Черногория
Дата: 08.02.08 14:27
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Делал подобную вещь на MFC, а как переложить на С# не знаю.


То есть каждая фигура — это окно
Help will always be given at Hogwarts to those who ask for it.
Re[2]: Графический редактор
От: Аноним  
Дата: 08.02.08 21:23
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, Аноним, Вы писали:


А>>Делал подобную вещь на MFC, а как переложить на С# не знаю.


_FR>То есть каждая фигура — это окно


Почему окно? Функции создания передается wnd окна на котором создается примитив.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.