单文档中每个view类中有自己的局部变量,所以在应用程序中定义全局变量要在这些View类啊,Doc类啊的外面。
待解决问题:希望对每处理一个文件,全局变量+1(如图1所示,期望处理后结果为5,CVMFC1不算)

ok,问题实际上是MFC中如何设置和操作全局变量
首先我们讲下最简单的解决方案,后面在分析下MFC原理(*^__^*)
======================================================================
最简单的解决方案:
1. CXXXApp类(CXXX.h文件)中添加变量,即定义全局变量(也就是累加器)m_ins_num;一般其构造函数会自动赋0
2. 在定义处前面加上 public: 否则会被视为protected属性
3. 在每个View类中调用,在处理函数(如打开函数)中现货区CXXXApp类指针,然后将该属性+1,这里还可以用Messagebox显示数字(整型数)
CCVMFCApp* app=(CCVMFCApp*) AfxGetApp();
app->m_ins_num++;
char ss[25];
sprintf(ss,"num=%d",app->m_ins_num);
MessageBox(ss,"instance_num");
======================================================================
下面讲一下原理什么的
我在编程的时候也经常遇到一些错误:
gj.obj : error LNK2001: 无法解析的外部符号 "int gg" (?gg@@3HA)
gjDlg.obj : error LNK2001: 无法解析的外部符号 "public: static int CgjApp::g_gl" (?g_gl@CgjApp@@2HA)
Debug/gj.exe : fatal error LNK1120: 2 个无法解析的外部命令
这些错误是由于对类中见的变量访问造成的,要分清楚是类的静态变量还是对象的成员变量,这很重要哦。
用MFC制作的工程由很多文件构成,它不能象一般C++程序那样随意在类外定义全局变量,在这里要想定义能被工程内多个文件共享的全局变量和函数必须用一些特殊方法才行。实际上有多种方法可以实现,这里只介绍两种方法。
一、在应用程序类中定义
用MFC生成的工程中都有一个名为CxxxApp的类,它派生于CWinApp类。这个类主要进行程序的初始化,生成文档、视图对象等工作。我们可以把需要全局访问的变量和函数定义为这个类的成员变量和成员函数,就可以实现全局访问了。
从严格意义上讲,这种变量和函数并不是全局的,因为它仍然只是类中的成员,只是由于我们很容易获得CxxxApp类的指针,所以我们可以在文档、视图、对话框以及各种自定义类中访问到它们,达到与全局变量类似的效果。访问时用函数“AfxGetApp()”获得CxxxApp类的指针,用“AfxGetApp()->成员”访问变量或函数。
例:
Test.h:(应用程序类头文件)

本文介绍了在MFC单文档应用中如何设置和管理全局变量,包括通过在CXXXApp类中定义变量和使用静态成员来实现全局访问。通过这两种方法,可以解决在不同类之间共享变量的需求,同时讨论了静态变量和静态函数的特性和使用注意事项。
332

被折叠的 条评论
为什么被折叠?



