用mfc制作的工程由很多文件构成,它不能象一般c++程序那样随意在类外定义全局变量,在这里要想定义能被工程内多个文件共享的全局变量与函数必须用一些特殊方法才行.实际上有多种方法可以实现,这里只介绍两种方法.
用mfc生成的工程中都有一个名为cxxxapp的类,它派生于cwinapp类.这个类主要进行程序的初始化,生成文档.视图对象等工作.我们可以把需要全局访问的变量与函数定义为这个类的成员变量与成员函数,就可以实现全局访问了. 【程序编程相关:借助封装类实现线程调用带参方法】一.在应用程序类中定义 【推荐阅读:在ASP.NET中值得注意的两个地方】例:test.h:(应用程序类头文件) 【扩展信息:ASP.NET2.0中数据源控件之异步数】从严格意义上讲,这种变量与函数并不是全局的,因为它仍然只是类中的成员,只是由于我们很容易获得cxxxapp类的指针,所以我们可以在文档.视图.对话框以及各种自定义类中访问到它们,达到与全局变量类似的效果.访问时用函数“afxgetapp()”获得cxxxapp类的指针,用“afxgetapp()->成员”访问变量或函数.class ctestapp : public cwinapp { public: int x; //全局变量int f(int y); //全局函数 …………}; test.cpp:(应用程序类程序文件)int ctestapp::f(int y) //全局函数定义 { y++; return y; } 定义在ctestapp类中的变量与函数可以在其它类中被访问.比如在视图的某函数中要访问变量x与函数f():void ctestview::xyz(){ ctestapp *app = (ctestapp *)afxgetapp(); //生成指向应用程序类的指针 app->x = 0; //访问变量x int z = app->f(1); //访问函数f() …………} 这样,变量x与函数f()可以视作为全局的.用这种方法实现的全局变量与全局函数虽比较简单,但也有缺点,一是访问不太方便,每次都需要获取应用程序类的指针;再就是把一些与应用程序类本身无关的变量与函数放在里面,使这个类看上去怪怪的,破坏了类的封装.... 下一页