нужно сделать простейший графический редактор — рисование прямоугольников, эллипсов и т.д.
с последующим графическим редактированием, т.е. выделил — появились зоны растяжки (в общем все как обычно)
Как это реализовать — в с# навичок.
Делал подобную вещь на 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(...);
и т.д. пока не закончим создание фигуры или не отменим
}
}
}
Здравствуйте, <Аноним>, Вы писали:
А>нужно сделать простейший графический редактор — рисование прямоугольников, эллипсов и т.д. А>с последующим графическим редактированием, т.е. выделил — появились зоны растяжки (в общем все как обычно)
А>Как это реализовать — в с# навичок. А>Делал подобную вещь на MFC, а как переложить на С# не знаю.
Здравствуйте, Аноним, Вы писали:
А>нужно сделать простейший графический редактор — рисование прямоугольников, эллипсов и т.д. А>с последующим графическим редактированием, т.е. выделил — появились зоны растяжки (в общем все как обычно)
А>Как это реализовать — в с# навичок.
В чем трудности-то?
Re[2]: Графический редактор
От:
Аноним
Дата:
06.02.08 11:33
Оценка:
Здравствуйте, Saruwatari, Вы писали:
А>>Как это реализовать — в с# навичок.
S>В чем трудности-то?
Как мне сделать создание примитива.
где обработать сообщения мыши.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Saruwatari, Вы писали:
А>>>Как это реализовать — в с# навичок.
S>>В чем трудности-то?
А>Как мне сделать создание примитива. А>где обработать сообщения мыши.
Коротко о мышах: MouseUp, MouseDown, MouseMove той поверхности, на которой рисуешь.
А в чем конкретно сложности создания примитива? Вообще, все нужно рисовать.
Здравствуйте, Аноним, Вы писали:
А>нужно сделать простейший графический редактор — рисование прямоугольников, эллипсов и т.д. А>с последующим графическим редактированием, т.е. выделил — появились зоны растяжки (в общем все как обычно)
А>Как это реализовать — в с# навичок. А>Делал подобную вещь на MFC, а как переложить на С# не знаю.
Я вас понял, вы делали "захват" очереди сообщений, для удобной обработки.
Я точно не знаю, т.к. не пробовал, но премеры подобные классу CRectTracker из MFC не видел, вся реализация проходила через отдельные методы OnMouseMove и т.п., что конечно не совсем удобно.
Как я это вижу, вам надо посмотреть в сторону переопределения PreProcessMessage, WndProc и т.п. и код получится более красивым и удоюным в использовании.
Здравствуйте, EtLIN, Вы писали:
ELI>Здравствуйте, Аноним, Вы писали:
А>>нужно сделать простейший графический редактор — рисование прямоугольников, эллипсов и т.д. А>>с последующим графическим редактированием, т.е. выделил — появились зоны растяжки (в общем все как обычно)
А>>Как это реализовать — в с# навичок. А>>Делал подобную вещь на MFC, а как переложить на С# не знаю.
ELI>Я вас понял, вы делали "захват" очереди сообщений, для удобной обработки. ELI>Я точно не знаю, т.к. не пробовал, но премеры подобные классу CRectTracker из MFC не видел, вся реализация проходила через отдельные методы OnMouseMove и т.п., что конечно не совсем удобно.
ELI>Как я это вижу, вам надо посмотреть в сторону переопределения PreProcessMessage, WndProc и т.п. и код получится более красивым и удоюным в использовании.
Вы предлагаете "пушку", для того, чтобы разобраться с воробьем. На счет элегантности не уверен. Таже фигня получится: "многа букав". В любом случае надо отлавливать (что и так понятно) нажатие, отпуск и передвижение мыши. Чем может быть элегантнее решение писать собственные хэндлеры, чем использование уже готового? Думаю, как раз наоборот. Если считать микросекунды и их брать за основу элегантности, то возможно...
Re[3]: Графический редактор
От:
Аноним
Дата:
07.02.08 19:58
Оценка:
S>Вы предлагаете "пушку", для того, чтобы разобраться с воробьем. На счет элегантности не уверен. Таже фигня получится: "многа букав". В любом случае надо отлавливать (что и так понятно) нажатие, отпуск и передвижение мыши. Чем может быть элегантнее решение писать собственные хэндлеры, чем использование уже готового? Думаю, как раз наоборот. Если считать микросекунды и их брать за основу элегантности, то возможно...
а вы что предлагаете — сделать примитивы(линия, окружность ...) прозрачными контролами и у них обрабатывать мышиные сообщения?
Здравствуйте, Аноним, Вы писали:
S>>Вы предлагаете "пушку", для того, чтобы разобраться с воробьем. На счет элегантности не уверен. Таже фигня получится: "многа букав". В любом случае надо отлавливать (что и так понятно) нажатие, отпуск и передвижение мыши. Чем может быть элегантнее решение писать собственные хэндлеры, чем использование уже готового? Думаю, как раз наоборот. Если считать микросекунды и их брать за основу элегантности, то возможно...
А>а вы что предлагаете — сделать примитивы(линия, окружность ...) прозрачными контролами и у них обрабатывать мышиные сообщения?
Это тоже выход, т.к. у них есть такая хорошая вещь как Region.
Но можно и руками рисовать, если не лень писать алгоритм определения принадлежит ли точка окружности (не находится внутри, а именно линии).
Это зависит от того что нужно.
Я же говорю о том, как сам редактор реализовывать, а не рисование.
Re[5]: Графический редактор
От:
Аноним
Дата:
08.02.08 07:27
Оценка:
Здравствуйте, Saruwatari, Вы писали:
S>Я же говорю о том, как сам редактор реализовывать, а не рисование.
а графический редактор это на 90% и есть рисование
хорошо теперь про алгоритм:
допустим есть форма — вы пердлагаете обрабатывать на форме события мыши, а не запутаетесь
для какого примитива обрабатывать — не проще ли сделать каждый примитив классом и в нем определить
процесс создания. а вот как повесить на эти классы обработку мышиных сообщений? Что бы при нажатии
кнопки создавался объект-примитив и уже в нем вести обработку мышиных событий.
Здравствуйте, Saruwatari, Вы писали:
S>Вы предлагаете "пушку", для того, чтобы разобраться с воробьем. На счет элегантности не уверен. Таже фигня получится: "многа букав". В любом случае надо отлавливать (что и так понятно) нажатие, отпуск и передвижение мыши. Чем может быть элегантнее решение писать собственные хэндлеры, чем использование уже готового? Думаю, как раз наоборот. Если считать микросекунды и их брать за основу элегантности, то возможно...
Это ваше субъективное мнение, а это было мое. Какое использовать автор решит сам. Для меня более элегантно, создать класс отвечающий за перемещение каждого примитива с определенным интерфейсом и перехватить только нужные сообщения в одном месте (PreProcessMessage, WndProc), а не разбрасывать по куче методов.
Здравствуйте, EtLIN, Вы писали:
ELI>Здравствуйте, Saruwatari, Вы писали:
S>>Вы предлагаете "пушку", для того, чтобы разобраться с воробьем. На счет элегантности не уверен. Таже фигня получится: "многа букав". В любом случае надо отлавливать (что и так понятно) нажатие, отпуск и передвижение мыши. Чем может быть элегантнее решение писать собственные хэндлеры, чем использование уже готового? Думаю, как раз наоборот. Если считать микросекунды и их брать за основу элегантности, то возможно...
ELI>Это ваше субъективное мнение, а это было мое. Какое использовать автор решит сам. Для меня более элегантно, создать класс отвечающий за перемещение каждого примитива с определенным интерфейсом и перехватить только нужные сообщения в одном месте (PreProcessMessage, WndProc), а не разбрасывать по куче методов.
Вы в своем методе (PreProcessMessage, WndProc) будете использовать switch, что, по сути, то же самое...
Здравствуйте, Аноним, Вы писали:
А>допустим есть форма — вы пердлагаете обрабатывать на форме события мыши, а не запутаетесь А>для какого примитива обрабатывать — не проще ли сделать каждый примитив классом и в нем определить А>процесс создания. а вот как повесить на эти классы обработку мышиных сообщений? Что бы при нажатии А>кнопки создавался объект-примитив и уже в нем вести обработку мышиных событий.
Форма — это холс для рисования, фреймворк в котором рисуют. Ему все равно какой объект рисуется. Он является дистрибъютором собятий мыши между человеком и фигурой и предоставляет сервис для того, чтобы фигуры сами себя отрисовали.
То, что вынаписали очень лизко к использованию наследования от Control. Определите свое рисование контрола, а мышь иперетаскивание объектов уже дело "пары строчек кода". (Если правильно описать, то контрол сам себя будет перетаскивать и останется только наследованиться от него.) Но при такое мподходе вы не управляете полностью отрисовкой объектов, слоями и пр.
Здравствуйте, Аноним, Вы писали:
А>Делал подобную вещь на 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 окна на котором создается примитив.