MFC中计数及文件操作
①计数功能,鼠标左键每点击一下,面板上的数字加1,鼠标右键每点击一下,面板上的数字减1.
1.建立一个新的MFC项目,我这里取名为jishu 后来因为要涉及到数据的存储,即把面板上的内容存起来,这与文档类( CJishuDoc)有关,我们把显示的数字变量nCount定义在类CJishuDoc中。找到文件视图中的jishuDoc.h ,双击,在public: 里面定义成员变量 int nCount 然后找到类视图中的CJishuDoc()(构造函数),双击,用初始化表对nCount赋处置,这里设为1,如图。
2.找到CJishuView里面的OnDrsw(CDC *pDC),双击,在里面写如下代码;
CString strCount; strCount.Format("计数 %d",pDoc->nCount); pDC->TextOut(20,20,strCount); //显示出来
这时候编译运行,界面上显示 计数1
3.接下来要实现左键加1,右键减1的功能,在类CJishuView中点击右键,Add Windows Message Handler,选左边的VM_LBUTTONDOWN(左键按下)和VM_LBUTTONDOWN,双击,OK。接下来对它们添加代码,点击CJishuView中的CJishuView(),出现代码界面,向下拉,可以看到void CJishuView::OnLButtonDown(UINT nFlags, CPoint point) 和
void CJishuView::OnRButtonDown(UINT nFlags, CPoint point),先对前者写代码。nCount是在文档类中定义的,要在视图类中使用它,涉及到了跨类使用,要使用文档类的指针(下面的*pDoc。
CJishuDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); ++pDoc->nCount; Invalidate();//刷新
这样左键的功能就做好了。在void CJishuView::OnRButtonDown(UINT nFlags, CPoint point)中添加代码
CJishuDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); --pDoc->nCount; Invalidate();
右键的功能也做好了。
4.编译,运行,点击左键,右键,功能实现。
②文件操作
1.写入和读入数据(nCount)
找到类视图中的CJishuDoc,双击里面的CJishuDoc(),出现代码界面,在里面找到void CJishuDoc::Serialize(CArchive& ar) 序列化函数。
写入下面代码:
if (ar.IsStoring()) { ar<<nCount; //写入。点击窗口界面上的保存,就把当前显示的nCount的值保存在文件中 // TODO: add storing code here } else { ar>>nCount; //读入。点击打开,从文件中读入存储的数据,并在屏幕上显示 // TODO: add loading code here }
2.点击窗口界面的新建时,实现对nCount 清 0
在刚才的代码界面中找到BOOL CJishuDoc::OnNewDocument() 在里面写代码 nCount=0;功能实现。
3.关闭窗口时,出现提醒,是否保存当前的数据(nCount)
在CJishuView里面找到void CJishuView::OnLButtonDown(UINT nFlags, CPoint point),在里面写如下代码:
pDoc->SetModifiedFlag(); //写在右键函数里也行