void CStarDirClApp::OnDirNew()
{
// TODO: Add your command handler code here
CDocument *pDoc = NULL;
POSITION pos1, pos2;
CView *pView = NULL;
CWnd *pWnd = NULL; if (m_pDirectoryTemplate)//判断是否正确设置了Frame,Doc,View之间的关系
{
pos1 = m_pDirectoryTemplate->GetFirstDocPosition();
if (pos1 != NULL)//-----------------------------------------(1)
{
pDoc = m_pDirectoryTemplate->GetNextDoc(pos1);-----(2)
if (pDoc)
{
pos2 = pDoc->GetFirstViewPosition();-------(3)
while (pos2 != NULL)
{
pView = pDoc->GetNextView(pos2);
}
if (pView)-----------------------------------(4)
{
pWnd = pView->GetParent();
pWnd = pWnd->GetParent();
ASSERT_KINDOF(CDirectoryFrame, pWnd);
pWnd->BringWindowToTop();
AfxGetMainWnd()->SendMessage(WM_COMMAND,(WPARAM)ID_DIR_BAR);
}
}
}
else
{
pDoc = m_pDirectoryTemplate->OpenDocumentFile(NULL);
if (pDoc)
{
CString sTitle;
sTitle.LoadString(IDS_DIRTREE);
pDoc->SetTitle(sTitle);
}
AfxGetMainWnd()->SendMessage(WM_COMMAND,(WPARAM)ID_DIR_BAR);
}
}
}
请详细解释一下作这么多判断是为什么?那几个相应的函数就是干这个用的?
{
// TODO: Add your command handler code here
CDocument *pDoc = NULL;
POSITION pos1, pos2;
CView *pView = NULL;
CWnd *pWnd = NULL; if (m_pDirectoryTemplate)//判断是否正确设置了Frame,Doc,View之间的关系
{
pos1 = m_pDirectoryTemplate->GetFirstDocPosition();
if (pos1 != NULL)//-----------------------------------------(1)
{
pDoc = m_pDirectoryTemplate->GetNextDoc(pos1);-----(2)
if (pDoc)
{
pos2 = pDoc->GetFirstViewPosition();-------(3)
while (pos2 != NULL)
{
pView = pDoc->GetNextView(pos2);
}
if (pView)-----------------------------------(4)
{
pWnd = pView->GetParent();
pWnd = pWnd->GetParent();
ASSERT_KINDOF(CDirectoryFrame, pWnd);
pWnd->BringWindowToTop();
AfxGetMainWnd()->SendMessage(WM_COMMAND,(WPARAM)ID_DIR_BAR);
}
}
}
else
{
pDoc = m_pDirectoryTemplate->OpenDocumentFile(NULL);
if (pDoc)
{
CString sTitle;
sTitle.LoadString(IDS_DIRTREE);
pDoc->SetTitle(sTitle);
}
AfxGetMainWnd()->SendMessage(WM_COMMAND,(WPARAM)ID_DIR_BAR);
}
}
}
请详细解释一下作这么多判断是为什么?那几个相应的函数就是干这个用的?
解决方案 »
- 你知道吗?
- 拖动一个子对话框后,它原来占据的区域变成白色,父对话框没有刷新那个区域
- 截取数据显示
- 求助对话框控件上显示图像闪烁问题
- 拦截sendto函数的问题(在线急等)
- 我的程序安装在win98上时,提示“链接文件 mydll.dll 到不存在的输出 MFC42.dll”,怎么回事??
- 如何把CEditView设置为只读?
- 《visual c++ 入门与提高》清华大学 徐晓刚 高兆法 编著
- @@@@@@@@@@@@@@@@@@@@如何用二进制文件来存储链表@@@@@@@@@@@@@@@@@@@@@@@
- 如何创建一个文件并且让它存在于一个目录中?
- VC中汇编的调用方法
- 如何画出长轴不是水平的椭圆
改为两个 pDoc = m_pDirectoryTemplate->GetNextDoc(pos1);
pDoc = m_pDirectoryTemplate->GetNextDoc(pos1);
结果会怎么样?
pDoc = m_pDirectoryTemplate->GetNextDoc(pos1);
如果这样连续调用两遍的话,两次返回的pDoc是不同的。你看看GetNextDoc函数,pos1这个变量是一直在改变的。调用一次后,返回当前的pDoc,同时pos1将指向下一个文档对象了