Есть диалоговое окно, требуется создать область для рисования.
Как самостоятельно внедрить CView в это окно?
Спасибо.
Здравствуйте, _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
Здравствуйте, Patalog, Вы писали:
P>Здравствуйте, _juks_, Вы писали:
__>>Есть диалоговое окно, требуется создать область для рисования.
__>>Как самостоятельно внедрить CView в это окно?
P>Ежели нужно лишь "область для рисования", то зачем именно CView?
P>OnPaint еще никто не отменял...
Пока у меня хватает знаний только на то, чтобы рисовать в клиентской области (CPaintDC dc(this)

, но это ведь некультурно как-то выходит. По-хорошоему надо создавать область и рисовать в ней. Никак не могу найти доходчивой информации, как создать объект CView, изменить ему габариты и показать его на экране
Спасибо.
Здравствуйте, _juks_, Вы писали:
__>Здравствуйте, Patalog, Вы писали:
P>>Здравствуйте, _juks_, Вы писали:
__>>>Есть диалоговое окно, требуется создать область для рисования.
__>>>Как самостоятельно внедрить CView в это окно?
P>>Ежели нужно лишь "область для рисования", то зачем именно CView?
P>>OnPaint еще никто не отменял...
__>Пока у меня хватает знаний только на то, чтобы рисовать в клиентской области (CPaintDC dc(this)
, но это ведь некультурно как-то выходит. По-хорошоему надо создавать область и рисовать в ней.
Область — это совокупность координат. Ее не надо создавать.
По-хорошоему надо создавать контрол — наследник от CStatic и рисовать в нем
__>Никак не могу найти доходчивой информации, как создать объект CView, изменить ему габариты и показать его на экране 
Найти не можешь потому что до такого пока никто не додумался — создавать CView в диалоге только чтобы было куда рисовать. Как сделаешь — твоя публикация будет первой. А в отзывах и комментариях к ней напишут примерно то что я написал выше — "зачем CView если можно обойтись CStatic"
Благодаря общей помощи, кое-что у меня, всё же, вышло
Я унаследовал 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;
}
…
}
Здравствуйте, _juks_, Вы писали:
__>Благодаря общей помощи, кое-что у меня, всё же, вышло 
Тогда уж "вопреки общей помощи"