Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

в какой функции следует выводить графику?

14K
14 апреля 2007 года
BFS
34 / / 11.04.2007
В общем, теперь нужно прорисовать эллипсы. Первая пара координат - определяется по первому щелчку мыши, вторая - по второму. Далее всё повторяется, но нужно чтобы всё, что уже нарисовано, оставалось на экране(перерисовывалось). Ниже я приведу часть кода.

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 то ничего не выводится ((
320
14 апреля 2007 года
m_Valery
1.0K / / 08.01.2007
В ф-ии обработчике нажатия левой кнопки мыши пиши
 
Код:
void CGraf2View::OnLButtonDown(UINT nFlags, CPoint point)
{
    CDC *pDC = GetDC();
    pDC->Ellipse(point.x-25,point.y-25,point.x+25,point.y+25);
    CView::OnLButtonDown(nFlags, point);
}

Будет выодить эллипсы с ценром в той точке,где нажал.
14K
15 апреля 2007 года
BFS
34 / / 11.04.2007
Спасибо, Работает). Если несложно, скажите, есть ли функция сохранения текущего рисунка в файл, с последующим его чтением оттуда?
Требуетя сделать следующее:
1) чтобы после сохранения и последующего чтения из файла, можно было бы изменять созданную графику. Например, растягивать эллипсы. Как бы это лучше реализовать? Пока у меня на мысли только создавать доп файл, в котором будет отмечаться, какие объекты были созданы, и их размещение. Может быть существуют MFC функции, которые позволили бы это делать проще?
320
15 апреля 2007 года
m_Valery
1.0K / / 08.01.2007
Цитата: BFS
... Если несложно, скажите, есть ли функция сохранения текущего рисунка в файл, с последующим его чтением оттуда?...


Конечно,есть.Тогда делаем так
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.Ф-ия
Код:
void Cdraw_1View::OnDraw(CDC* pDC)
{
    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.Потом закрыл приложение,запустил по новой и открыл этот файл,появлятся твои эллипсы.
По поводу растягивания эллипсов:то как ты собираешся их растягивать
- мышкой(нажал,потянул,растянул ?) или как ?
14K
15 апреля 2007 года
BFS
34 / / 11.04.2007
да, эллипс так и планируется растягивать). Если будут известны координаты всех фигур на рисунке, то при щелчке мышью, можно будет высчитать координаты курсора мыши. Если "щелкун" щелкнул возле границы какого-либо эллипса, значит он хочет её растянуть. Ну а далее дожидаемся второго щелчка, и меняем соответствующие координаты. Сразу возник ещё один вопрос: чтобы закрасить старый эллипс, его нужно будет обвести белым цветом. Как сменить цвет кисти?

П.С. Не думайте, что я всё бесконца буду сдесь спрашивать, просто программу сделать срочно нужно, а сам я это в срок не успеваю...
14K
15 апреля 2007 года
BFS
34 / / 11.04.2007
Хотя можно и мышкой(нажал, потянул-растянул), только это потом. Такой вариант я вижу как через определённый шаг мыши(когда левая кнопка нажата) перерисовывать эллипс.
320
15 апреля 2007 года
m_Valery
1.0K / / 08.01.2007
Цитата: BFS
да, эллипс так и планируется растягивать). Если будут известны координаты всех фигур на рисунке, то при щелчке мышью, можно будет высчитать координаты курсора мыши. Если "щелкун" щелкнул возле границы какого-либо эллипса, значит он хочет её растянуть. Ну а далее дожидаемся второго щелчка, и меняем соответствующие координаты. Сразу возник ещё один вопрос: чтобы закрасить старый эллипс, его нужно будет обвести белым цветом. Как сменить цвет кисти?
...


Тебе надо разобраться с тем как конкретно ты собираешься расстягивать.Надо все продумать.По левому щелчку мыши рисуется следующий эллипс;) Рекомендую посмотреть как это делается в Photoshop.Там есть Transform и Free Transform.Ты ведь делаешь что то
наподобие графического редактора ? Вот ты говоришь Эесли щелкнул возле
границы какого-либо эллипса...Что значит возле ? Насколько возле ? И почему расстягиваться должен именно этот эллипс,а не соседний или еще
какой-нибудь ? А что будет если эллипсов нарисовано много и они налеплены друг на друга,перекрывают друг друга ? Как тогда определять,
какой именно из них расстягивать ? Я бы так не делал.

14K
15 апреля 2007 года
BFS
34 / / 11.04.2007
Цитата: m_Valery
Тебе надо разобраться с тем как конкретно ты собираешься расстягивать.Надо все продумать.По левому щелчку мыши рисуется следующий эллипс;) Рекомендую посмотреть как это делается в Photoshop.Там есть Transform и Free Transform.Ты ведь делаешь что то
наподобие графического редактора ? Вот ты говоришь Эесли щелкнул возле
границы какого-либо эллипса...Что значит возле ? Насколько возле ? И почему расстягиваться должен именно этот эллипс,а не соседний или еще
какой-нибудь ? А что будет если эллипсов нарисовано много и они налеплены друг на друга,перекрывают друг друга ? Как тогда определять,
какой именно из них расстягивать ? Я бы так не делал.



Valery, ещё раз спасибо за Ваши ответы мне. До этого этапа всё работает. Насчёт эллипсов - я думаю что справлюсь, по крайней мере навыки алгоритмизации у меня получше развиты, чем навыки работы с VC++ )

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог