MFC执行过程

MFC程序的连个MIAN函数都找不到,这样看程序真的一脸懵逼,在百度上查了一下大概的流程

第一步:

MFC每创建一个项目,一般会包含3个类,“关于”对话框类、主对话框类以及用于初始化项目的App类,假如项目名称为Demo,那么这三个类分别为

CAboutDlg,CDemoDlg、CDemoApp。

项目生成后,都会生成一个属于CDemoAPP的类theApp对象,对这个应用程序实例化这个在CDemoApp.cpp文件中定义,创建时调用构造函数CDemoApp::CDemoApp();这就是程序创建的第一步

第二步:

程序会调用WINMAIN函数这个在项目文件中找不到但可以在VS的安装路径中找到       int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,_In_            LPTSTR lpCmdLine, int nCmdShow);

第三步:

调用winmain函数后就直接通过InitInstance();这个函数是CDemoApp中除了构造哈数外唯一的成员函数   。

应用程序建立完成,程序开始运行windows程序事件都是消息驱动的产生的消息触发响应事件,消息和事件通过消息映射DECLARE_MESSAGE_MAP()联系再一起的                

BEGIN_MESSAGE_MAP(CRoobtDlg, CDialogEx)
	ON_WM_SYSCOMMAND()//响应控制指令
	ON_WM_PAINT()    //响应绘图消息,刷新窗口
	ON_WM_QUERYDRAGICON()//当用户拖动最小化窗口是取得光标

	ON_BN_CLICKED(IDOK, &CRoobtDlg::OnBnClickedOk)
	ON_BN_CLICKED(IDC_BUTTON2, &CRoobtDlg::OnBnClickedButton2)
	
END_MESSAGE_MAP()

当用户关闭应用程序时,会发送一个WM_CLOSE消息,程序响应后结束程序,如何在点击
关闭时需要弹出其他对话框(比如用于提示保存),可以通过类向导添加WM_CLOSE消息处理函数,变添加相关处理程序,比如:

void CDemoDlg::OnClose()
{
if (MessageBox(_T("确定退出吗"), _T("提示"), MB_YESNO|MB_ICONWARNING) 
== IDNO)
return;
CDialogEx::OnClose();
}


我自己的工程是CRoot总结一下执行过程

1)class CRoobtApp : public CWinApp;//Roobt.h基类初始化构造把所有的值都
赋为null
2)AfxRoobtMain函数将被调用   //MFC通过链接器指向函数我们在程序中找不到
3)afxWinMain函数调用CRoobtApp::InitApplication成员函数,这个成员函数用
来初始化应用程序对象当中的关于文档部分的内容
4)CRoobtApp::InitInstance()          //Roobt.cpp
在这个成员函数当中,使用new操作在堆上声明一个框架窗口对象,由此导致框架窗口
对象的构造函数被调用,在框架窗口构造函数当中调用Create函数来创建窗口,而调用
的Create函数一般将
WNDCLASS参数设置成NULL,这样就由MFC内部调用PreCreateWindow函数,在这
个函数当中由MFC注册几个默认的WNDCLASS供框架窗口的Create使用。这时程序控
制权交还给
CRoobtApp::InitInstance成员函数内部,由这个函数调用CWnd::ShowWindow显
示窗口并且调用CWnd::UpdateWindow向窗口发送WM_PAINT消息。
调用完CRoobtApp::InitInstance成员函数后由AfxWinMain函数调用
CRoobtApp::Run成员函数,
并由这个函数来创建和处理消息循环,并且在没有消息的时候处理OnIdle空闲处理。
至此整个程序的创建过程完成。


5)由消息地址开始执行BEGIN_MESSAGE_MAP(CRoobtDlg, CDialogEx)扫描


// ---------------- 关闭窗口后-------------------------------------
6) void CRoobtDlg::OnClose();//析构函数等结束程序的处理函数;可以不写系统
自动处理


windows程序和单片机程序最明显的区别就在于一个是事件触发一个是非事件触发,
事件触发的好处
是节省了cpu的使用,是cpu减负。了解MFC处理过程就是先对程序设计有一些大体上
的主观认识这样
学习起来才能有的放矢得心应手。


文章大部分摘自百度知道就不加原作者名字了谢谢网友分享知识                           
    


猜你喜欢

转载自blog.csdn.net/qq_36305492/article/details/78183657