调用工程中的theApp指针----AfxGetApp()
2008-04-11 09:36
501 查看
我看到一段程序:
m_HArrow=AfxGetApp()->LoadStandardCursor(IDC_ARROW);
m_HCross=AfxGetApp()->LoadStandardCursor(IDC_CROSS);
问题:为什么写成:
m_HArrow=LoadStandardCursor(IDC_ARROW);
m_HCross=LoadStandardCursor(IDC_CROSS);
不行呢?此处 AfxGetApp()的用法,作用及返回值是什么?(帮助里看不清楚。)
回答:
LoadStandardCursor不是VC++的标准函数,也不是API的函数,它是CWinApp类的函数,当然你不能不写AfxGetApp()。AfxGetApp返回一个CWinApp对象指针,就是MFC生成的C??App.cpp中定义的那个对象。如果你需要调用这个对象的某个成员函数,就可以使用AfxGetApp()函数。
我们在任何一个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类中变量的调用。
m_HArrow=AfxGetApp()->LoadStandardCursor(IDC_ARROW);
m_HCross=AfxGetApp()->LoadStandardCursor(IDC_CROSS);
问题:为什么写成:
m_HArrow=LoadStandardCursor(IDC_ARROW);
m_HCross=LoadStandardCursor(IDC_CROSS);
不行呢?此处 AfxGetApp()的用法,作用及返回值是什么?(帮助里看不清楚。)
回答:
LoadStandardCursor不是VC++的标准函数,也不是API的函数,它是CWinApp类的函数,当然你不能不写AfxGetApp()。AfxGetApp返回一个CWinApp对象指针,就是MFC生成的C??App.cpp中定义的那个对象。如果你需要调用这个对象的某个成员函数,就可以使用AfxGetApp()函数。
我们在任何一个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类中变量的调用。
相关文章推荐
- 调用工程中的theApp指针----AfxGetApp()
- MFC中去掉untitledvoid CMainFrame::OnUpdateFrameTitle(BOOL bAddToTitle) { // TODO: 在此添加专用代码和/或调用基类 if (theApp.m_pDoc->GetTitle().GetLength() < 1) { CString szAppName; szAppName.Format(AFX_IDS_APP_T
- mfc 封装 theapp winmain afxGetapp
- 重庆大学光电工程学院 贾旭滨 对 “句柄” “指针” 有下面的描述(AfxGetMainWnd GetSafeHwnd() AfxGetAppName() AfxGetThread)
- 对 “句柄” “指针” 有下面的描述(AfxGetMainWnd GetSafeHwnd() AfxGetAppName() AfxGetThread)
- afxgetapp->afxmainwnd 与afxgetmainwnd的区别 /线程中调用afxgetmainwnd的问题
- C#调用VC的DLL时AfxGetApp失败的解决方法
- 线程间通信 1全局变量2当前主对话框指针3发消息方式4 AfxBeginThread的返回值(为CWinThread类型的指针)5AfxGetApp
- AfxGetApp(),this->GetSafeHwnd(),AfxGetMainWnd()->m_hWnd
- 慎用AfxGetApp()->GetMainWnd()->m_hWnd
- VC8下多线程环境中AfxGetMainWnd()返回空指针问题及解决方法
- AfxGetApp();
- AfxGetApp()
- AfxGetApp->GetMainWnd()与AfxGetMainWnd
- mfc中的 afxgetapp 和 afxgetmainwnd 以及生命全局变量
- getRunningTasks API从Android 5.0开始非系统App调用会出问题
- AfxGetApp()->GetMainWnd()和AfxGetMainWnd()的区别
- MFC的模块状态:从AfxGetApp()和AFX_MANAGE_STATE()看MFC的模块状态
- AfxGetApp()和GetSafeHwnd()
- AfxGetApp