DocクラスのOnOpenDocumentの時の動作が他の時と違う?

[戻る]
ナオーバ 2002/09/04(水) 15:03:43
CMainFrameでフォルダ選択をした後に

    pDoc->SetPath( szPath );            // パスを設定
    pDoc->FileRead();                   // ファイルを読み込む
    this->GetTreeView()->SelectRoot();  // ツリービューのルートを選択
    szPathはフォルダ選択クラスより取得します

があります。問題なく予定した動作をしています。


これと同じ動作を 最近使ったファイル で実装したいので、

DocクラスのOnOpenDocumentに

BOOL CViewerDoc::OnOpenDocument(LPCTSTR lpszPathName) 
{
//  if (!CDocument::OnOpenDocument(lpszPathName))
//      return FALSE;
    
    this->SetPath( lpszPathName );
    this->FileRead();

    CMainFrame* pFrm = (CMainFrame *)AfxGetMainWnd();
    ASSERT( pFrm );
    ASSERT( pFrm->GetTreeView() );
    pFrm->GetTreeView()->SelectRoot();

    return TRUE;
}

をしてもツリービューのルートを選択してくれません。
何故でしょうか?

どこを調べると良いかでも、解答でもなんでもいいのでよろしくお願いします。

WIN2000 SP2
VC6.0   SP5
MFC使用

ナオーバ 2002/09/04(水) 17:37:07
[[解決]]
解決しました

自作関数 FileRead();内でファイルを読み、UpdateAllViews( NULL );をしています
フォルダ検索時はこの後にツリービューのルートを選択をしても問題ないのですが、

OnOpenDocument時は、CSingleDocTemplate::OpenDocumentFile中で
InitialUpdateFrameが呼ばれて、すべてのビューのOnInitialUpdateが呼ばれるので、
ツリービューのルートを選択をしてもここで更新されてしまったのでした。


OnOpenDocument、InitialUpdateFrameもおおもとはCWinApp::OnOpenRecentFileなので

CWinApp::OnOpenRecentFileを下記のようにオーバーライドして実現しました。

BOOL CViewerApp::OnOpenRecentFile(UINT nID)
{
    m_bRecentFile = CWinApp::OnOpenRecentFile(nID);

    CMainFrame* pFrm = (CMainFrame *)AfxGetMainWnd();
    ASSERT( pFrm );
    ASSERT( pFrm->GetTreeView() );
    pFrm->GetTreeView()->SelectRoot();

    return      m_bRecentFile;
}

古いスレッドには追加発言できません。