VC和MFC的一些常见问题(三)

2013-04-24 12:10:49 · 作者: · 浏览: 456

 

  在参考手册或在线帮助中,有两个CdocTemplate类的公共成员函数没有被说明。然而, 这些公共成员函数在CDocTemplate类中被定义,并且为在打开文档的列表中前后搜索提供了简单的支持。

  这些函数如下:

  Function virtual POSITION GetFirstDocPosition() const;

  调用该函数得到在打开的文档列表中与模板相关联的第一个文档的位置。返回的POSITION的值能够被GetNextDoc成员函数反复使用。

  Function Virtual CDocument* GetNextDoc(POSITION& rPosition) const;

  rPostion是前面调用GetNextDoc 或GetFirstDocPosition成员函数返回的POSITION值。这个值不能是NULL。调用该函数来在所有打开的文档中进行迭代。该函数返回被rPosition所标识的文档并将rPosition设置为列表中的下一个文档的POSITION值。假如所检索的是列表中的最后一个文档,rPosition将被设为空值。

  注意,这仅对MFC3.2版本或更低版本有效,对MFC4.0版本请参考下面:

  void CMyApp::DoSomethingToAllDocs()

  {

  CObList pDocList;

  POSITION pos = GetFirstDocTemplatePosition();

  while(pos)

  {

  CDocTemplate* pTemplate = GetNextDocTemplate(pos);

  POSITION pos2 = pTemplate->GetFirstDocPosition();

  while(pos2)

  {

  CDocument* pDocument;

  if(pDocument = pTemplate->GetNextDoc(pos2))

  pDocList.AddHead(pDocument);

  }

  }

  if(!pDocList.IsEmpty()){

  pos = pDocList.GetHeadPosition();

  while(pos)

  {

  //为每一个文档调用CDocument函数

  ( (CDocument*)pDocList.GetNext(pos) )

  ->UpdateAllViews(NULL);

  }

  }

  如何使我的程序在启动时不创建一个新文档?

  在程序的InitInstance中的ProcessShellCommand函数之前加入: cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing