为什么在MFC程序代码中到不到Run()和ExitInstance()两个函数?

如题所述

懂你得意思了,run()函数MFC里没有,功能类似的是InitInstance( )函数,工程创建的时候被自动创建在CxxxxApp类中,代码如下

BOOL CMy3DApp::InitInstance()
{
 AfxEnableControlContainer();

 // Standard initialization
 // If you are not using these features and wish to reduce the size
 //  of your final executable, you should remove from the following
 //  the specific initialization routines you do not need.

#ifdef _AFXDLL
 Enable3dControls();   // Call this when using MFC in a shared DLL
#else
 Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif

 CMy3DDlg dlg;
 m_pMainWnd = &dlg;
 int nResponse = dlg.DoModal();
 if (nResponse == IDOK)
 {
  // TODO: Place code here to handle when the dialog is
  //  dismissed with OK
 }
 else if (nResponse == IDCANCEL)
 {
  // TODO: Place code here to handle when the dialog is
  //  dismissed with Cancel
 }

 // Since the dialog has been closed, return FALSE so that we exit the
 //  application, rather than start the application's message pump.
 return FALSE;
}

 

ExitInstance()函数在工程创建的时候并没有创建,需要自己使用类向导创建在CxxxxAPP类中

创建后的代码为

int CMy3DApp::ExitInstance()
{
 // TODO: Add your specialized code here and/or call the base class
 
 return CWinApp::ExitInstance();
}
若满意请及时采纳,谢谢

追问

MFC的运行机制不就是: InitInstance()——Run()——ExitInstance() 吗?怎么会没有呢?

追答

你指的运行不是InitInstance()?app之后就是窗体的创建了,没有运行这个函数,创建窗体时有个InitDialog函数,你指的是它?它是创建窗体时首先要执行的函数

追问

应用程序运行过程是什么?不就是InitInstance()——Run()——ExitInstance吗?InitDialog是对话框初始化函数吧

追答

Run()函数在微软的APPCORE.CPP文件中,而这个文件已被编译成dll,你可以搜一下
// Main running routine until application exits
int CWinApp::Run()
{
if (m_pMainWnd == NULL && AfxOleGetUserCtrl())
{
// Not launched /Embedding or /Automation, but has no main window!
TRACE0("Warning: m_pMainWnd is NULL in CWinApp::Run - quitting application.\n");
AfxPostQuitMessage(0);
}
return CWinThread::Run();
}

温馨提示:内容为网友见解,仅供参考
无其他回答

为什么在MFC程序代码中到不到Run()和ExitInstance()两个函数?
Run函数被APP类封装了,无法看到和使用。ExitInstance同样是APP类做了默认处理,但可以重载实现自己的ExitInstance。

为什么在MFC程序代码中到不到Run()和ExitInstance()两个函数?
懂你得意思了,run()函数MFC里没有,功能类似的是InitInstance( )函数,工程创建的时候被自动创建在CxxxxApp类中,代码如下 BOOL CMy3DApp::InitInstance(){ AfxEnableControlContainer();\/\/ Standard initialization \/\/ If you are not using these features and wish to reduce the size \/\/ of ...

ExitInstance介绍
语法:virtual int ExitInstance();说明:只能在Run成员函数内部调用,不能在其他的任何地方调用该成员函数。函数的默认实现将框架的选项写入应用程序的.INI文件。重载这个函数以在应用程序退出的时候执行一些清除操作。在开发基于MFC的应用程序时,ExitInstance函数是一个非常重要的成员函数。它用于在应用程序...

MFC中的InitInstance()函数应该怎样理解
提出这样的问题是由于在他们所编写的MFC应用中看不到WinMain()函数。这个函数是隐藏在MFC框架中,MFC的设计者将它作得很通用(这主要得益于Window的消息驱动的编程机制,使得作一个通用的WinMain()很容易),因此在一般情况下,无需更改WinMain()的代码,MFC的设计者也不提倡程序员修改WinMain()的代码。在MFC中,实际实现W...

VC中MFC从哪里开始运行,MFC怎么调试
回答:在MFC中的执行顺序是这样的,首先Windows调用WinMain函数,WinMain里面调用AfxWinMain函数,注意你的代码现在来了,AfxWinMain函数调用对应你程序的APP类(这个类是基于CWinApp的,CWinApp又是基于CWinThread的)的InitInstance函数,如果InitInstance返回TRUE,就调用CWinThread的Run函数,这个函数你可以重载,但是一般...

为什么我在一个VC++程序中找不到主函数main啊?
在DOS下,程序的执行是从main函数开始的。在Windows下,对应的函数是WinMain。但是,如果浏览Hello程序的所有的方法和全局函数,是找不到WinMain函数的。MFC考虑到典型的Windows程序需要的大部分初始化工作都是标准化的,因此把WinMain函数隐藏在应用程序的框架中,编译时会自动将该函数链接到可执行文件中。程...

基于MFC在DLL中继承CWnd类后的调用问题
在MFC程序中,我们并不经常直接调用Windows API,而是从MFC类创建对象并调用属于这些对象的成员函数.也就是说MFC封装了Windows API 你说你喜欢C++而MFC换一种说法就是一个用C++写的一个函数库 然后你来调用 只不过这个类不是你写的 MFC提供数百个类,最重要的、也是编写任何VC++应用程序都必不可少的两个类...

mfc中主线程是WinMain还是CWinThread派生的应用程序类CWinApp中的线程...
首先,你的提问中,CWinThread的工作函数不是WinMain,而是Run。其次,如果讨论界定在MFC的标准主线程,那么这是很明确的,同样是Run函数。CWinApp是MFC主线程的标准类,派生后的APP类,从InitInstance进入,之后进入了CWinApp类的Run:int CWinApp::Run(){if (m_pMainWnd == NULL && AfxOleGetUserCtrl(...

MFC中如何在一个按钮中循环一个事件,在点击另一按钮时结束这个事件?
②在第一个按钮(启动循环)事件里面加入如下代码:\/\/单击此按钮启动一个线程用于实现循环void CCreateThreadexDlg::OnBnClickedButton1(){ \/\/ TODO: 在此添加控件通知处理程序代码 CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)startlop,NULL,0,0);}③在第一个按钮上面定义一个线程函,此函数用于当...

MFC没有main函数也可以执行吗?急
MFC考虑到典型的Windows程序需要的大部分初始化工作都是标准化的,因此把WinMain函数隐藏在应用程序 的框架中,编译时会自动将该函数链接到可执行文件中。程序员可以重写WinMain函数,但一般不需要这么做。下面的程序清单3-1给出了WinMain函数的代码。其中,_tWinMain函数在\\DevStudio\\Vc\\Mfc\\src\\ AppModul...

相似回答