CView
От: _juks_ http://juks.ru
Дата: 29.12.03 19:07
Оценка:
Есть диалоговое окно, требуется создать область для рисования.
Как самостоятельно внедрить CView в это окно?

Спасибо.
Re: CView
От: _Jane_ Украина  
Дата: 30.12.03 10:11
Оценка:
Здравствуйте, _juks_, Вы писали:

__>Есть диалоговое окно, требуется создать область для рисования.

__>Как самостоятельно внедрить CView в это окно?
__>Спасибо.

Можно встроить в статик.

CView* m_pView; // inside dialog class
// в принципе можно и CMyView m_View

// in OnInitDialog:
RECT dlgRect;
CWnd* wnd = GetDlgItem(IDC_STATIC_FRAME_FOR_VIEW);
wnd->GetClientRect(&dlgRect);

m_pView = new CMyView();

if ((CView*)m_pView->Create(NULL, NULL, WS_CHILD | WS_VISIBLE,
                                      dlgRect, wnd, NULL, NULL))
   {
      m_pView->AnyFunctionYouNeedToInitialize();
   }
   else
   {
      delete m_pView;
      m_pView = NULL;
      return FALSE;
   }

//!!! don't forget to delete m_pView on destroying
Jane
Re: CView
От: Patalog Россия  
Дата: 30.12.03 10:39
Оценка:
Здравствуйте, _juks_, Вы писали:

__>Есть диалоговое окно, требуется создать область для рисования.

__>Как самостоятельно внедрить CView в это окно?


Ежели нужно лишь "область для рисования", то зачем именно CView?
OnPaint еще никто не отменял...
Почетный кавалер ордена Совка.
Re[2]: CView
От: _juks_ http://juks.ru
Дата: 30.12.03 21:28
Оценка:
Здравствуйте, Patalog, Вы писали:

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


__>>Есть диалоговое окно, требуется создать область для рисования.

__>>Как самостоятельно внедрить CView в это окно?


P>Ежели нужно лишь "область для рисования", то зачем именно CView?

P>OnPaint еще никто не отменял...

Пока у меня хватает знаний только на то, чтобы рисовать в клиентской области (CPaintDC dc(this), но это ведь некультурно как-то выходит. По-хорошоему надо создавать область и рисовать в ней. Никак не могу найти доходчивой информации, как создать объект CView, изменить ему габариты и показать его на экране

Спасибо.
Re[3]: CView
От: Аноним  
Дата: 30.12.03 21:34
Оценка:
Здравствуйте, _juks_, Вы писали:

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


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


__>>>Есть диалоговое окно, требуется создать область для рисования.

__>>>Как самостоятельно внедрить CView в это окно?


P>>Ежели нужно лишь "область для рисования", то зачем именно CView?

P>>OnPaint еще никто не отменял...

__>Пока у меня хватает знаний только на то, чтобы рисовать в клиентской области (CPaintDC dc(this), но это ведь некультурно как-то выходит. По-хорошоему надо создавать область и рисовать в ней.

Область — это совокупность координат. Ее не надо создавать.
По-хорошоему надо создавать контрол — наследник от CStatic и рисовать в нем

__>Никак не могу найти доходчивой информации, как создать объект CView, изменить ему габариты и показать его на экране

Найти не можешь потому что до такого пока никто не додумался — создавать CView в диалоге только чтобы было куда рисовать. Как сделаешь — твоя публикация будет первой. А в отзывах и комментариях к ней напишут примерно то что я написал выше — "зачем CView если можно обойтись CStatic"
Re[4]: CView
От: _juks_ http://juks.ru
Дата: 30.12.03 23:07
Оценка:
Благодаря общей помощи, кое-что у меня, всё же, вышло

Я унаследовал CView и описал его OnDraw(CDC* pDC), а уж потом приделал его к статику. Иначе никак не получалось: в родительском классе даже конструктор "private". Действует.

Правильно ли инициировать созданный класс в CTestDlg::OnInitDialog()? И не совсем понятно, что в данном случае вызывает OnDraw? Выходит, что сообщения рассылаются всем порождённым окнам автоматически?

----------------------
class CMyView: public CView
{
public:
virtual void OnDraw(CDC* pDC);
};
----------------------
void CMyView::OnDraw(CDC* pDC) {
pDC->LineTo(100,100);
}
----------------------
CTestDlg::OnInitDialog()
{
RECT dlgRect;
CWnd* wnd;
wnd = (CWnd*)GetDlgItem(IDC_MY);
wnd->GetClientRect(&dlgRect);
MyView = new CMyView();

if ((CView*)MyView->Create(NULL, NULL, WS_CHILD | WS_VISIBLE, dlgRect, wnd, NULL, NULL))
{

} else {
delete MyView;
MyView = NULL;
return FALSE;
}

}
Re[2]: CView
От: _juks_ http://juks.ru
Дата: 30.12.03 23:13
Оценка:
Спасибо за совет!
Re[5]: CView
От: Serguei666 Беларусь  
Дата: 31.12.03 04:23
Оценка:
Здравствуйте, _juks_, Вы писали:

__>Благодаря общей помощи, кое-что у меня, всё же, вышло

Тогда уж "вопреки общей помощи"
Хотите сказать 'спасибо'? Тогда поставьте оценку
Re[5]: CView
От: Amon-RA  
Дата: 31.12.03 08:39
Оценка:
Здравствуйте, _juks_, Вы писали:

Никак не пойму — нафига CView. Уж лучше CWnd
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.