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使用
解決しました
自作関数 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;
}