技术开发 频道

在Visual Studio 2010中实现灾难恢复

  跟我们在上面所介绍的“MFC应用程序向导”中的选项相一致,如果你选择的是“Support Restart Manager”,你可以在初始化函数中添加如下的代码: 

m_dwRestartManagerSupportFlags =
       AFX_RESTART_MANAGER_SUPPORT_RESTART;

  如果你想选择“Reopen previously open documents”,可以添加如下的代码:

m_dwRestartManagerSupportFlags =
AFX_RESTART_MANAGER_SUPPORT_RESTART_ASPECTS;

  如果你想选择“Support application recover”,可以添加下面这行代码:

m_dwRestartManagerSupportFlags =
        AFX_RESTART_MANAGER_SUPPORT_ALL_ASPECTS;

  例如,我只想支持重启管理器,让软件可以在更新后重新启动,则可以这样进行应用程序的初始化:

CRestartManagerDemoApp::CRestartManagerDemoApp()
{
m_bHiColorIcons
= TRUE;
// support Restart Manager
m_dwRestartManagerSupportFlags
= AFX_RESTART_MANAGER_SUPPORT_RESTART;
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}

  实例:创建支持重启管理器的MFC应用程序

  下面我们以一个实际的例子,来看看如何在我们的MFC应用程序中添加对重启管理器的支持。

  首先,启动Visual Studio 2010 CTP,创建一个单文档的应用程序RestartManagerDemo。按照我们前面的介绍,在“MFC应用程序向导”中选择“Support Restart Manager”和“Reopen previously open documents”选项,以支持应用程序的重新启动和文档的重新打开。

  为了验证重启管理器重新打开文档的功能,我们在文档中添加一些数据,这些数据将在程序重新启动后自动被加载进来。

// 泡泡类,用于在视图中显示圆圈泡泡
class CBubble
{
public:
     CBubble(CPoint cp,
double fR)
{
          m_nCenterPoint
= cp;
          m_fR
= fR;
};
     CBubble()
{};
// 圆心
CPoint m_nCenterPoint;
// 半径    
double m_fR;
};

class CRestartManagerDemoDoc : public CDocument
{
protected: // create from serialization only
CRestartManagerDemoDoc();
DECLARE_DYNCREATE(CRestartManagerDemoDoc)

// Attributes
public:
// 保存数据的数组
    CArray
<CBubble,CBubble&> m_Array;
// Operations
public:
CArray
<CBubble,CBubble&>& GetBubbleArray()
{
                        
return m_Array;
};
//
};

  然后,我们需要实现文档的序列化函数,使得我们的文档数据能够保存和重新加载:

// CRestartManagerDemoDoc serialization

void CRestartManagerDemoDoc::Serialize(CArchive
& ar)
{
// 保存数据
if (ar.IsStoring())
{
  
// TODO: add storing code here
          
int nSize = m_Array.GetSize();
          ar
<<nSize;
          
for(int nIndex = 0; nIndex < nSize; ++nIndex )
  {
   CBubble tempBubble
= m_Array.GetAt( nIndex );
               ar
<<tempBubble.m_nCenterPoint;
               ar
<<tempBubble.m_fR;
  }
}
else // 加载数据
{
  
// TODO: add loading code here
  
int nSize = 0;
          ar
>>nSize;
  
for(int nIndex = 0; nIndex < nSize; ++nIndex )
  {
  
//CBubble tempBubble = m_Array.GetAt( nIndex );
               CPoint tempPoint;
              
double tempR;
              ar
>>tempPoint;
               ar
>>tempR;
   m_Array.Add( CBubble( tempPoint, tempR) );
            
  }
}
}

  完成文档类的工作后,我们就有了保存数据的容器,现在我们需要对数据进行修改和显示。在视图类中,我们通过鼠标点击,修改文档中的数据,向其中添加CBubble对象。

0
相关文章