`
springluo
  • 浏览: 32281 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

vs 2008学习 c++(8)

 
阅读更多
转载自http://blog.csdn.net/tianmeshi/article/details/4209904

AfxGetApp( )是全局的。
AfxGetApp( )这个函数可以得到当前应用进程的指针,是CWinApp*类型的,通过这个指针可以访问到这个进程中的对象。
比如在全局函数中要向对话框中的列表写数据。

void writeString(char* pString)



   CWnd* pWnd = AfxGetApp()->GetMainWnd();
   CMyDlg * pDlg;
   pDlg=(CMyDlg *) pWnd;
   pDlg->ShowMsg(pString);



AfxGetApp()得到进程指针CWinApp*,通过这个指针可以得到pWnd。要不在全局函数里你怎么对已存在的对话框操作呢。

AfxGetApp( )这个函数可以得到当前引用的指针CWinApp*,通过这个指针可以访问到这个进程中的对象。

==============================================================================

我们在任何一个VC工程中都会看到一个类似于:

  //Test.cpp文件中

  CTestApp theApp;(工程名为Test)

的语句。它是指向工程对象的一个指针,你可以用它方向Test工程的成员函数和变量。

如果工程中添加了一个CConfig类,在CConfig中想调用Test工程中的成员函数和变量,则可以这样调用之:

  CTestApp *pApp=(CTestApp *)AfxGetApp( );

如果在CTest类中我们声明如下一些变量:

//Test.cpp文件

class CTestApp : public CWinApp
{
public:

CTestApp( );

CString str; //添加的对话框变量

...

}

//Test.cpp文件

CTestApp::CTestApp()

{

str="abc";

}

好了,现在我们就在CConfig类中调用str吧!

//Config.cpp文件

  CTestApp *pApp=(CTestApp *)AfxGetApp( );

  AfxMessageBox(pApp->str);

这样,就实现了对CTestApp类中变量的调用。

================================================================

afxgetapp    --    取应用程序实例指针  
getmainwnd   --    取主窗口对象指针  
   
这两个函数可以合成一个:  afxgetmainwnd();  
我通常把一些重要的工程一开始就需要初始化的并且在其它地方类中都要用到的变量或
函数定义在C***App类中,然通过此函数获得这些变量或函数。
AfxGetApp
The pointer returned by this function can be used to access application
information such as the main message-dispatch code or the topmost window.

CWinApp* AfxGetApp();
Return Value
A pointer to the single CWinApp object for the application.

Example
// Print the application's executable filename.
TRACE("Executable filename = %s/n", AfxGetApp()->m_pszExeName);

Requirements
Windows CE versions: 2.0 and later
Header file: Declared in Afxwin.h
Platform: H/PC Pro, Palms-size PC, Pocket PC
----
如果你定义为取全局变量,只需在需要的地方用extern声名即可
如果把变量在你的C*App类中定义,就可以通过通过AfxGetApp()获取C*App的指针,这样就可以调用它的变量了.如果是全局变量,这不需要用这个函数调用它AfxGetApp()的返回值是指向theApp的指针,与全局变量无关。



AfxGetApp()这个函数在VC当中很常见,主要是用来获得CWinAPP生成的全局对象的。一般情况下将其强制类型转换成你自己写的App类就可以调用里面的方法了。但是如果编写的是DLL程序的话,情况会稍有不同。你会发现在DLL中调用AfxGetApp这个函数会得到DLL的应用对象。原因出现在DLL的模块状态上。应用程序在调用DLL时为了保证资源不出问题,往往会调用一句:



AFX_MANAGE_STATE(AfxGetStaticModuleState())





注意这是一个宏。他的作用是切换模块的全局变量范围,即把应用程序的那些全局变量拷贝切换到这个DLL的全局变量拷贝,自然用AfxGetApp得到就是DLL里面的这个APP了。如果向访问应用程序的App对象,那么只要把模块状态切换回去就可以了,记着执行完后一定要把状态再切换回来啊,否则就要出问题了。

例如:



// switch thread state back to application

_AFX_THREAD_STATE* pState = AfxGetThreadState();

AfxSetModuleState(pState->m_pPrevModuleState);

// do something with the application

AfxGetApp()->...

// switch thread state back to dll

AFX_MANAGE_STATE(AfxGetStaticModuleState())


分享到:
评论

相关推荐

    VS2008 实例 c++

    在本实例中,我们主要...总的来说,这两个项目提供了学习C++编程和Windows GUI开发的实践平台,涵盖了从基础的API调用到高级的图形界面设计。通过深入研究和理解这些示例,开发者可以掌握VS2008下C++编程的核心技能。

    基于VS2008的C++程序设计

    学习C++,首先需要理解基本的语法结构,如变量、运算符、控制流语句(如if-else、for、while循环)以及函数的使用。 书中会详细介绍类与对象的概念,这是C++的核心特性。读者将学会如何定义类,实现数据封装和隐藏...

    c++编程vs2008

    虽然VS2008已经不是最新版本的Visual Studio,但对于学习C++编程来说,它仍然是一个非常实用的工具。通过实际操作和实践,你可以更深入地理解C++语言的各种特性和编程技巧,为成为一名优秀的C++开发者打下坚实的基础...

    vs2008 c++代码库

    【标题】"vs2008 c++代码库"是一个包含多方面C++开发资源的集合,主要用于Visual Studio 2008环境下进行程序开发。这个库涵盖了多种关键的编程技术,如ATL(Active Template Library)、Attributes、CLR(Common ...

    基于VS2008的用C++编写的openGL例子

    从这些文件可以看出,这个项目是一个典型的VS2008+C+++OpenGL的学习实例,包括源码、可执行文件以及IDE的相关配置。学习者可以通过阅读和运行代码来理解OpenGL的使用方法,例如初始化OpenGL上下文、绘制几何图形、...

    Vs2008的C++

    【标题】"Vs2008的C++" 指的是使用Visual Studio...总的来说,Vs2008的C++学习涵盖了从基础语法到高级特性,以及软件工程实践等多个方面,是一个全面的编程学习平台,尤其对初学者来说,能够提供良好的学习和实践环境。

    QR code 生成二维码 demo (VS2008-C++)

    8. **编译和运行**:使用VS2008,开发者需要配置项目设置,确保链接到正确的库,并将源代码编译为可执行程序。运行时,用户可能需要输入待编码的数据,然后程序会生成相应的二维码图像。 9. **调试和测试**:为了...

    VS2008 C++ GDAL库 显示TIFF影像

    本项目是基于VS2008的C++环境,利用GDAL库实现了一个读取并显示TIFF影像的小程序。GDAL,全称Geospatial Data Abstraction Library,是一个强大的开源库,用于处理地理空间数据,支持多种栅格和矢量数据格式,包括...

    梯度下降法VS2008_C++

    通过分析和理解"梯度下降法VS2008_C++"项目,我们可以掌握梯度下降法的核心概念,并将其应用于其他机器学习问题。同时,了解如何在C++环境中构建这样的算法,对于提升我们的编程技能和解决实际问题的能力大有裨益。...

    VS2008使用教程——很简单的c++编程截图教程

    在VS2008中,你可以利用“帮助”菜单获取C++语言和IDE的官方文档,同时网络上有大量教程和社区支持,如Stack Overflow,可以帮助解答你在学习过程中遇到的问题。 总结,Visual Studio 2008为C++开发者提供了一个...

    vs2008写的c++读写xml完整程序

    总的来说,这个“vs2008写的c++读写xml完整程序”是一个很好的学习资源,它涵盖了C++与XML交互的基础知识,对于想要在C++项目中使用XML的开发者来说,是一个宝贵的实践案例。通过深入分析和研究这个程序,不仅可以...

    visual c++ 编程(基于vs2008)

    《Visual C++编程(基于VS2008)》是一份专为初学者设计的教程,旨在帮助读者快速掌握C++编程语言的基础知识以及如何在Visual Studio 2008环境下进行开发。C++是一种强大的、面向对象的编程语言,广泛应用于系统软件...

    VS2008录音实时显示频谱(C++)

    总的来说,这个项目结合了音频输入、信号处理和图形显示等多个技术点,对于学习C++音频编程以及理解音频处理流程的人来说,具有很高的参考价值。虽然作者指出程序存在不足,但它提供了一个基础框架,供其他开发者在...

    VS2008 C++银行排队完整系统

    总的来说,"VS2008 C++银行排队完整系统"是一个结合理论与实践的学习资源,既涵盖了C++的基础知识,又涉及到软件工程的实际应用,对于提升编程技能和理解系统设计有极大的帮助。通过这个项目,开发者不仅可以掌握C++...

    C++ 2008 视频教程

    《C++ 2008 视频教程》是一份专为学习C++编程语言的初学者和进阶者设计的资源,通过视频教学的形式,深入浅出地讲解了C++ 2008版本的相关知识。这个教程采用Visual C++ 2008作为开发环境,帮助用户熟悉微软的IDE...

    《2008版 白话c++》

    《2008版 白话C++》是一本针对初学者编写的C++教程,旨在帮助非软件专业背景的读者快速入门编程世界...利用这个资源,读者不仅可以系统地学习C++的基础知识,还能通过实例练习加深理解,最终成为一名熟练的C++程序员。

    Beginning Visual C++ 2008

    《Ivor Horton’s Beginning Visual C++ 2008》是一本专为初学者设计的教程,旨在引导读者深入理解Microsoft的Visual C++ 2008编程环境。这本书覆盖了C++语言的基础,以及如何利用Visual Studio 2008开发环境进行...

    串口调试助手C++源码(VS 2008)

    【串口调试助手C++源码(VS 2008)】是一个使用Microsoft Visual Studio 2008开发的C++程序,主要用于帮助开发者进行串口通信的调试工作。这个程序提供了用户友好的界面,使得用户能够方便地发送和接收串口数据,...

    C/C++程序设计学习与实验系统 V2008.13.part1

    原名《Turbo C/C++ for Windows 集成实验与学习环境》,现已更名为《C/C++程序设计学习与实验系统》,现在已全面支持最新操作系统VISTA,它由从事一线教学的大学教师根据C/C++初学者的特点,量身定制的一个简单易用的...

Global site tag (gtag.js) - Google Analytics