Last Updated 2004/11/10
Programming Tips Visual C++ MFC ドキュメントビュー  索 引 
ドキュメントからビューの取得
2004/11/10

複数のドキュメントや複数のビューが存在する場合(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) {
    // ビュー発見
}


参照
前後のTips
ドキュメントからビューの取得

DSS ProgrammingTipsCGI Ver2.01