複数のドキュメントや複数のビューが存在する場合(MDIなど),指定のドキュメントからビューを得る方法を以下に示す.
CView *CMyWinApp::GetMyView(const CRuntimeClass * pDocClass)
{
CView* pView = NULL;
CDocument* pNextDoc = NULL; // 目的のドキュメント
// 全ドキュメントテンプレートから検索
POSITION pos = GetFirstDocTemplatePosition();
while( pos != NULL && !pNextDoc ) {
CMultiDocTemplate* pDocTemplate;
pDocTemplate = (CMultiDocTemplate *)GetNextDocTemplate( pos );
if( pDocTemplate ) {
// 全ドキュメントクラスから検索
POSITION posDoc = pDocTemplate->GetFirstDocPosition();
while(posDoc != NULL) {
CDocument* pDoc = pDocTemplate->GetNextDoc( posDoc );
if( pDoc->IsKindOf( RUNTIME_CLASS(CMDI2Doc) ) ) {
// 目的のドキュメントクラス
pNextDoc = pDoc;
break;
}
}
}
}
if(pNextDoc) {
POSITION posView = pNextDoc->GetFirstViewPosition();
if(posView != NULL) {
// 目的のビュー
pView = pNextDoc->GetNextView(posView);
}
}
return pView;
}
こんな感じで使用する.
CMyWinApp *pWinApp = (CMyWinApp*)AfxGetApp();
CView* pView = pWinApp->GetMyView( RUNTIME_CLASS(CMyDoc) );
if(pView) {
// ビュー発見
}
参照