Как получить доступ из CMyDoc::CDocument к CMyView::CView
От: Bingin  
Дата: 20.10.04 13:33
Оценка:
Как получить доступ из
CMyDoc: public CDocument

к
CMyView: public CView



Спасибо.
Re: Как получить доступ из CMyDoc::CDocument к CMyView::CVie
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 20.10.04 13:34
Оценка:
Здравствуйте, 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();
   }   
}
- Искренне ваш, Поросенок Пафнутий
Re[2]: Как получить доступ из CMyDoc::CDocument к CMyView::C
От: Bingin  
Дата: 20.10.04 13:44
Оценка:
Здравствуйте, 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);



Спасибо.
Re[3]: Как получить доступ из CMyDoc::CDocument к CMyView::C
От: Burz  
Дата: 20.10.04 13:51
Оценка:
Здравствуйте, 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) тебе поможет
Re[3]: Как получить доступ из CMyDoc::CDocument к CMyView::C
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 20.10.04 13:52
Оценка:
Здравствуйте, Bingin, Вы писали:

B>Мне нужо вызвать собственную функцию из CMyView.

B>Например вызвать

B>
B>CMyView::AddData(int c, int r);
B>


CMyView* pMyView = DYNAMIC_DOWNCAST(CMyView, GetNextView(pos));
- Искренне ваш, Поросенок Пафнутий
Re[3]: Как получить доступ из CMyDoc::CDocument к CMyView::C
От: rus blood Россия  
Дата: 20.10.04 14:52
Оценка:
Здравствуйте, Bingin, Вы писали:

B>Мне нужо вызвать собственную функцию из CMyView.

B>Например вызвать

B>
B>CMyView::AddData(int c, int r);
B>


Это значит, что у тебя неудачная архитектура, или неудачные названия методов.
Данные хранит документ, а view их только отображает.

Поэтому если ты добавляешь какие-то данные, то документ должен это сделать сам, а потом сообщить всем view об изменении. Для такой нотификации есть стандартные механизмы в MFC.

Если же ты не придерживаешься реального распределения ролей в архитектуре document/view между своими классами, то view может при своем создании просто сообщить о себе документу (передает указатель), а документ потом использует переданный указатель для вызова методов. И не надо будет делать всякие GetFirstViewPosition/GetNextView, downcast-ить и пр. ужасы...
Имею скафандр — готов путешествовать!
Re: Как получить доступ из CMyDoc::CDocument к CMyView::CVie
От: random_name  
Дата: 21.10.04 07:05
Оценка:
Здравствуйте, 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();
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.