в какой функции следует выводить графику?
int x1, y1, x2, y2;
int l = 0; //если л=1 то выбрали первый угол, если л=2 - то второй.
CDC* p1DC;
void CGraf2View::OnLButtonDown(UINT nFlags, CPoint point)
{
CView::OnLButtonDown(nFlags, point);
l += 1;
if (l == 1) {x1 = point.x; y1 = point.y;}
else {
x2 = point.x;
y2 = point.y;
l = 0;
p1DC->Ellipse(x1, y1, x2, y2);
};
}
Объясните пож., как нужно сделать. Так выдаёт ошибку, если разместить в CGraf2View::OnDraw то ничего не выводится ((
{
CDC *pDC = GetDC();
pDC->Ellipse(point.x-25,point.y-25,point.x+25,point.y+25);
CView::OnLButtonDown(nFlags, point);
}
Будет выодить эллипсы с ценром в той точке,где нажал.
Требуетя сделать следующее:
1) чтобы после сохранения и последующего чтения из файла, можно было бы изменять созданную графику. Например, растягивать эллипсы. Как бы это лучше реализовать? Пока у меня на мысли только создавать доп файл, в котором будет отмечаться, какие объекты были созданы, и их размещение. Может быть существуют MFC функции, которые позволили бы это делать проще?
Конечно,есть.Тогда делаем так
1.В файл ...Doc.h добавляешь #include "afxtempl.h" (после #pragma once
допишешь)
2.В этот же класс документа добавь такой контейнер
CArray <CPoint,CPoint>mArray; делаешь его public.
3.Функция OnLButtonDown(UINT nFlags, CPoint point) тогда будет выглядеть так
// дальше вместо многоточия твой класс документа
C...Doc* pDoc=GetDocument();
pDoc->mArray.Add(point);
Invalidate();
CView::OnLButtonDown(nFlags, point);
...
4.Ф-ия
{
Cdraw_1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
int count=pDoc->mArray.GetCount();
for(int i=0;i<count;i++){
CPoint point=(pDoc->mArray.GetAt(i));
pDC->Ellipse(point.x-25,point.y-25,point.x+25,point.y+25);
}
}
Тут рисуем.
5.Идем в файл ...Doc.cpp,находим ф-ию Serialize(CArchive& ar)
if (ar.IsStoring())
{
mArray.Serialize(ar);
}
else
{
mArray.Serialize(ar);
}
...
Теперь все сохраняется,т.е нарисовал эллипсы,нажал в меню SaveAs
и сохранил допустим,как Untitled.Потом закрыл приложение,запустил по новой и открыл этот файл,появлятся твои эллипсы.
По поводу растягивания эллипсов:то как ты собираешся их растягивать
- мышкой(нажал,потянул,растянул ?) или как ?
П.С. Не думайте, что я всё бесконца буду сдесь спрашивать, просто программу сделать срочно нужно, а сам я это в срок не успеваю...
...
Тебе надо разобраться с тем как конкретно ты собираешься расстягивать.Надо все продумать.По левому щелчку мыши рисуется следующий эллипс;) Рекомендую посмотреть как это делается в Photoshop.Там есть Transform и Free Transform.Ты ведь делаешь что то
наподобие графического редактора ? Вот ты говоришь Эесли щелкнул возле
границы какого-либо эллипса...Что значит возле ? Насколько возле ? И почему расстягиваться должен именно этот эллипс,а не соседний или еще
какой-нибудь ? А что будет если эллипсов нарисовано много и они налеплены друг на друга,перекрывают друг друга ? Как тогда определять,
какой именно из них расстягивать ? Я бы так не делал.
наподобие графического редактора ? Вот ты говоришь Эесли щелкнул возле
границы какого-либо эллипса...Что значит возле ? Насколько возле ? И почему расстягиваться должен именно этот эллипс,а не соседний или еще
какой-нибудь ? А что будет если эллипсов нарисовано много и они налеплены друг на друга,перекрывают друг друга ? Как тогда определять,
какой именно из них расстягивать ? Я бы так не делал.
Valery, ещё раз спасибо за Ваши ответы мне. До этого этапа всё работает. Насчёт эллипсов - я думаю что справлюсь, по крайней мере навыки алгоритмизации у меня получше развиты, чем навыки работы с VC++ )