Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разобраться с классом для рисования 
V
    Опции темы
Melevir
Дата 13.3.2010, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем доброго времени суток! 
Нужна помощь. Пишу класс, которому передаешь окно (CWnd), а он на нем рисует график. Проблема в том, что я не могу разобраться с CPaintDC. Как я понял, в каждом методе класса его создавать нельзя, он должен быть одним из полей. А вот как с ним обращаться тогда.. Подскажите пожалуйста.
Код

class PolarGraph
{
private:
    CWnd* pWnd;
    CPaintDC dc();
    int Ax;
    int Ay;
    int Bx;
    int By;
    void DrawRect();
    void DrawAxis();
public:
    PolarGraph(CWnd* pWnd, int Ax, int Ay, int Bx, int By);
};

PolarGraph::PolarGraph(CWnd* pWnd, int Ax, int Ay, int Bx, int By)
{

    this->Ax=Ax;
    this->Ay=Ay;
    this->Bx=Bx;
    this->By=By;
    this->pWnd=pWnd;
    CPaintDC* dc = new CPaintDC(pWnd);

    DrawRect();
    DrawAxis();
}

void PolarGraph::DrawRect()
{
    //CPaintDC dc(pWnd);
    dc.MoveTo(Ax,Ay);
    dc.LineTo(Bx,Ay);
    dc.LineTo(Bx,By);
    dc.LineTo(Ax,By);
    dc.LineTo(Ax,Ay);
}

void PolarGraph::DrawAxis()
{
    //CPaintDC dc(pWnd);
    dc.MoveTo(Ax+(Bx-Ax)*0.05,Ay+(By-Ay)*0.5);
    dc.LineTo(Ax+(Bx-Ax)*0.95,Ay+(By-Ay)*0.5);
    //pWnd->Invalidate();    
}

При такой реализации ругается 
Код

Error    1    error C2228: left of '.MoveTo' must have class/struct/union

Если в каждой функции создавать CPaintDC, то будет рисоваться только первая из двух вызванных (DrawRect()).
PM MAIL   Вверх
mes
Дата 13.3.2010, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Melevir @  13.3.2010,  09:14 Найти цитируемый пост)
Пишу класс, которому передаешь окно (CWnd), а он на нем рисует график

Логичнее  передавать не CWnd, a CPaintDC ..




--------------------
PM MAIL WWW   Вверх
Melevir
Дата 14.3.2010, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Гениально, черт побери! Спасибо!smile
А все же если так делать, то как? Мало ли что еще мне от формы понадобится..
PM MAIL   Вверх
Earnest
Дата 16.3.2010, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Цитата(Melevir @  13.3.2010,  11:14 Найти цитируемый пост)
Проблема в том, что я не могу разобраться с CPaintDC. Как я понял, в каждом методе класса его создавать нельзя, он должен быть одним из полей

CPainDC нужно создавать только в одном месте -  в методе OnPaint. В других местах - бесполезно. Держать членом класса тоже бессмысленно.
В остальные методы (вызываемые из OnPaint) лучше передавать не CPaintDC, а базовый CDC: это даст больше гибкости, в частности, можно будет в любой момент перейти к рисованию во внеэкранном буфере и т.д.
Схема работы такая:

void CMyWnd::OnPaint()
{
   CPaintDC dc (this);
   DrawSomething (dc);
   DrawSomethingElse (dc);


При этом методы Draw... объявлены так:
   void DrawSomething (CDC&);


--------------------
...
PM   Вверх
Melevir
Дата 18.3.2010, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибаsmile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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