VS数据流向

软件开发中,数据非常重要。使用VS2008开发软件时,也会产生CApp,CDoc,CView和CMainFrame几个模块。那么,这其中数据是如何流向的呢?


MyData数据文件
CDoc数据管理入口
CApp数据管理
CMainFrame数据操作
CView数据显示




一.使用默认文档模板

1.新建单文档应用程序

2.添加数据文件

数据结构和头文件,如果有文件相关操作,比如打开关闭等,可以在源文件中操作。
struct tFILE_INFO
{
	CString sFileVer;	//文件版本
	CString sAuthor;	//文件作者
	CString sProDes;	//项目信息
	CString sRightDes;	//所有权描述
	tFILE_INFO()
	{
		sFileVer	= _T("V1.0");
		sAuthor		= _T("songli");
		sProDes		= _T("Test");
		sRightDes	= _T("This is a test!");
	}
	tFILE_INFO& operator = (tFILE_INFO& item)
	{
		sFileVer	= item.sFileVer;
		sAuthor		= item.sAuthor;
		sProDes		= item.sProDes;
		sRightDes	= item.sRightDes;
		return *this;
	}
};

class CMyData
{
public:
	CMyData(void);
	~CMyData(void);

	tFILE_INFO m_FileInfo;

	CMyData& operator = (CMyData& item)
	{
		m_FileInfo = item.m_FileInfo;
		return *this;
	}
};

3.在CDoc中添加数据成员变量

public:
	CMyData m_MyData;

4.在CMainFrm中使用数据

头文件
private:
	CDataStreamDemoDoc* m_pDoc;
public:
	CDataStreamDemoDoc* GetDocument() {return m_pDoc;}
protected:
	virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);

源文件
CMainFrame::CMainFrame()
{
	m_pDoc = NULL;
}

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
	m_pDoc = (CDataStreamDemoDoc*)(pContext->m_pCurrentDoc);

	return CFrameWnd::OnCreateClient(lpcs, pContext);
}

5.在CView中显示数据

头文件
class CDataStreamDemoView : public CEditView
{
public:
	virtual void OnInitialUpdate();
	CDataStreamDemoDoc* GetDocument() const;
	void UpdateEditView();
}

源文件
void CDataStreamDemoView::OnInitialUpdate()
{
	CEditView::OnInitialUpdate();

	CEdit& edit = GetEditCtrl();
	edit.SetReadOnly(TRUE);

	UpdateEditView();
}

CDataStreamDemoDoc* CDataStreamDemoView::GetDocument() const
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDataStreamDemoDoc)));
	return (CDataStreamDemoDoc*)m_pDocument;
}

void CDataStreamDemoView::UpdateEditView()
{
	CMyData& data = GetDocument()->m_MyData;

	CString sText = _T("");
	CString str = _T("");

	str.Format("文件版本:[%s] \r\n",data.m_FileInfo.sFileVer);
	sText = sText + str;
	str.Format("文件作者:[%s] \r\n",data.m_FileInfo.sAuthor);
	sText = sText + str;
	str.Format("项目信息:[%s] \r\n",data.m_FileInfo.sProDes);
	sText = sText + str;
	str.Format("所有权描述:[%s] \r\n",data.m_FileInfo.sRightDes);
	sText = sText + str;

	CEdit& edit = GetEditCtrl();
	edit.SetWindowTextA(sText);
}

二.使用自定义文档模板

前三项与上一样

1.新建单文档应用程序
2.添加数据文件
3.在CDoc中添加数据变量

4.在CApp中添加数据管理

头文件
public:
	virtual BOOL InitInstance();
	virtual int ExitInstance();

private:
	CDataStreamDemoDoc* m_pDoc;
public:
	CDataStreamDemoDoc* GetDocument();

源文件
CDataStreamDemoApp::CDataStreamDemoApp()
{
	m_pDoc = NULL;
}

BOOL CDataStreamDemoApp::InitInstance()
{
	//在文档、框架窗口和视图之间的连接之前
	m_pDoc = new CDataStreamDemoDoc;
	if(!m_pDoc)
	{
		return FALSE;
	}
}

int CDataStreamDemoApp::ExitInstance()
{
	if(m_pDoc)
	{
		delete m_pDoc;
		m_pDoc = NULL;
	}

	return CWinApp::ExitInstance();
}

CDataStreamDemoDoc* CDataStreamDemoApp::GetDocument()
{
	ASSERT(m_pDoc->IsKindOf(RUNTIME_CLASS(CDataStreamDemoDoc)));
	return m_pDoc;
}

5.在CMainFrm和CView中使用和显示数据

头文件
public:
	CDataStreamDemoDoc* GetDocument();

源文件
CDataStreamDemoDoc* CMainFrame::GetDocument()
{
	return ((CDataStreamDemoApp*)AfxGetApp())->GetDocument();
}



其中,我们可以看出,主要区别在于:在CApp中新建了一个文档变量(具体查看自定义文档的第4项),在使用中对于文档的指向也有所改变。
CDataStreamDemoDoc* CDataStreamDemoView::GetDocument() const
{
	//默认数据模板
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDataStreamDemoDoc)));
	return (CDataStreamDemoDoc*)m_pDocument;

	//新建数据模板
	return ((CDataStreamDemoApp*)AfxGetApp())->GetDocument();
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值