MFC执行顺序

根据 《孙鑫vc++讲座》视频教程的讲解,从执行原理上说,MFC的程序和常规C++语言的程序是完全一致的。 C++中的main函数相当于MFC中的WinMain函数。

MFC执行顺序

需要说明的是, 对于MFC程序,MainFrame,View,Dialog等都是窗口。这些窗口的注册与创建、显示等要反复调用多次,一次只能调用一个窗口 。

窗口执行顺序

如何编写MFC程序

与普通的c / c ++应用程序不同,在该应用程序中,入口点是main,您可以完全控制执行流程。MFC应用程序是事件驱动的。您编写的代码是基于由于用户与应用程序交互(例如,单击按钮,在文本框中输入文本等)而发生的事件而执行的。当没有交互时,应用程序将处于空闲状态。

(1)最好的位置是OnInitDialog来放置您的初始化代码。您可以在OnInitDialog中初始化所有成员变量。(请记住winMain是Windows应用程序的入口点。但是在MFC中,它被深埋在模板代码中。)

(2)添加消息处理程序以处理用户操作,以便稍后执行您的核心程序。例如:如果对话框上有一个按钮,则需要为该按钮添加消息处理程序函数,当用户单击该按钮时,该函数将被调用。使用类向导可以轻松完成此操作。

小结

  • 再次强调一下MFC执行的过程为:注册窗口,产生窗口,更新窗口,消息循环。
  • 执行到!pThread->InitInstance()程序将会转到test.cpp中执行BOOL CtestApp::InitInstance()函数。
  • 如果建立的是单文档工程则进入wincore.cpp中的BOOL AFXAPI AfxEndDeferRegisterClass(LONG fToRegister)函数中注册窗口类。
    但是通常情况下是进入BOOL CtestApp::InitInstance()函数之后执行到if(!ProcessShellCommand(cmdInfo))后进入MainFrm.cpp中执行BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)然后程序跳转进入wincore.cpp中执行BOOL CWnd::PreCreateWindow(CREATESTRUCT& cs)时注册窗口,注册窗口过程也是进入wincore.cpp中的BOOL AFXAPI AfxEndDeferRegisterClass(LONG fToRegister)函数中注册窗口类。
  • 注册完窗口类之后紧接着就应该产生窗口,程序进入winfrm.cpp中执行BOOL CFrameWnd::Create然后进入wincore.cpp执行BOOL CWnd::CreateEx产生窗口。
  • 产生完窗口之后进入test.cpp中执行m_pMainWnd->ShowWindow(SW_SHOW)显示窗口,然后执行m_pMainWnd->UpdateWindow()更新窗口。
  • 窗口创建完成之后程序返回AfxWinMain当中继续执行直到 nReturnCode = pThread->Run()进行消息循环。整个MFC程序执行流程结束。
  PS:在MFC中Resource.h一般是保存控件ID,系统资源ID等一些宏定义。打开的文件的路径里不能含有中文。
posted @ 2021-02-16 16:19  Weisswire  阅读(355)  评论(0编辑  收藏  举报