Здравствуйте, Bingin, Вы писали:
B>Как получить доступ из
B>B>CMyDoc: public CDocument
B>
B>к
B>B>CMyView: public CView
B>
CDocument::GetFirstViewPosition() + CDocument::GetNextView().
//To get the first view in the list of views:
POSITION pos = GetFirstViewPosition();
CView* pFirstView = GetNextView( pos );
// This example uses CDocument::GetFirstViewPosition
// and GetNextView to repaint each view.
void CMyDoc::OnRepaintAllViews()
{
POSITION pos = GetFirstViewPosition();
while (pos != NULL)
{
CView* pView = GetNextView(pos);
pView->UpdateWindow();
}
}
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>Здравствуйте, Bingin, Вы писали:
B>>Как получить доступ из
B>>B>>CMyDoc: public CDocument
B>>
B>>к
B>>B>>CMyView: public CView
B>>
SDB>CDocument::GetFirstViewPosition() + CDocument::GetNextView().
SDB>SDB>//To get the first view in the list of views:
SDB>POSITION pos = GetFirstViewPosition();
SDB>CView* pFirstView = GetNextView( pos );
SDB>// This example uses CDocument::GetFirstViewPosition
SDB>// and GetNextView to repaint each view.
SDB>void CMyDoc::OnRepaintAllViews()
SDB>{
SDB> POSITION pos = GetFirstViewPosition();
SDB> while (pos != NULL)
SDB> {
SDB> CView* pView = GetNextView(pos);
SDB> pView->UpdateWindow();
SDB> }
SDB>}
SDB>
Мне нужо вызвать собственную функцию из CMyView.
Например вызвать
CMyView::AddData(int c, int r);
Спасибо.
Здравствуйте, Bingin, Вы писали:
SDB>>SDB>>//To get the first view in the list of views:
SDB>>POSITION pos = GetFirstViewPosition();
SDB>>CView* pFirstView = GetNextView( pos );
SDB>>// This example uses CDocument::GetFirstViewPosition
SDB>>// and GetNextView to repaint each view.
SDB>>void CMyDoc::OnRepaintAllViews()
SDB>>{
SDB>> POSITION pos = GetFirstViewPosition();
SDB>> while (pos != NULL)
SDB>> {
SDB>> CView* pView = GetNextView(pos);
SDB>> pView->UpdateWindow();
SDB>> }
SDB>>}
SDB>>
B>B>CMyView::AddData(int c, int r);
B>
static_cast<CMyView>(pView) тебе поможет
Здравствуйте, Bingin, Вы писали:
B>Мне нужо вызвать собственную функцию из CMyView.
B>Например вызвать
B>B>CMyView::AddData(int c, int r);
B>
CMyView* pMyView = DYNAMIC_DOWNCAST(CMyView, GetNextView(pos));
Здравствуйте, Bingin, Вы писали:
B>Мне нужо вызвать собственную функцию из CMyView.
B>Например вызвать
B>B>CMyView::AddData(int c, int r);
B>
Это значит, что у тебя неудачная архитектура, или неудачные названия методов.
Данные хранит документ, а view их только отображает.
Поэтому если ты добавляешь какие-то данные, то документ должен это сделать сам, а потом сообщить всем view об изменении. Для такой нотификации есть стандартные механизмы в MFC.
Если же ты не придерживаешься реального распределения ролей в архитектуре document/view между своими классами, то view может при своем создании просто сообщить о себе документу (передает указатель), а документ потом использует переданный указатель для вызова методов. И не надо будет делать всякие GetFirstViewPosition/GetNextView, downcast-ить и пр. ужасы...
Здравствуйте, Bingin, Вы писали:
B>Как получить доступ из
B>B>CMyDoc: public CDocument
B>
B>к
B>B>CMyView: public CView
B>
B>Спасибо.
Вообщем попробуй такую вещь:
В своём виде CMyView создай некоторую статическую функцию — GetView()
типа:
static CMyView* GetView();
реализуй её:
CMyView* CMyView::GetView()
{
CFrameWnd* pFrame = (CFrameWnd*)(AfxGetApp()->m_pMainWnd);
CView* pView = pFrame->GetActiveView();
if(!pView)
return NULL;
if(!pView->IsKindOf(RUNTIME_CLASS(CMyView)))
return NULL;
return (CMyView*)pView;
}
и из любого места своей проги, где ты объявишь свой вид
делай вызов стат. функци и получишь необходимый тебе указатель
CMyView* pMyView = CMyView::GetView();