MFC复习(一)

大家都知道,windows API编程以及其消息处理,其过程都清晰可见,大体步骤如下:
1)声明消息窗口类
2)注册窗口类
3)createwindows
4)消息获得以及分派(windows procedure)。

但是,对于MFC同样是Windows程序,其流程却显得灰暗不明。现具体分析如下:
在MFC中有两个重要的类,CWinApp,CFrameWnd,它们两个的存在在某种意义上来说代替了WinMain 和 WinProc的存在。
对于任何一个MFC程序,都存在一个Application Object(theApp),由于它是一个全局对象,因此是一个程序的入口点,
当TheApp构造完了以后,由链接器将WinMain加入到应用程序中,它调用了AfxWinMain()函数。(在CExampleApp theApp;这一步,只要按F11一直跟下去就会到crtexe.c中的mainret = WinMain...,这里继续F11就会到appmodul.cpp中的return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);了)
之后在AfxWinMain中,执行了AfxWinInit(),pApp->InitApplication(),pApp->InitInstance(), pApp->Run();AfxWinTerm();完成程序的整个过程。
关于 InitInstance: 首先,它会new一个CFrameWnd成员,其构造函数调用了create();create()里面调用了createEx(),createEx()调用了PreCreateWindows();
这里面MFC默认注册了5种类型的窗口类型(Wnd,controlbar, mdiframe, FrameOrView, OleControl)。

消息过程的流程:主要是调用AfxWndProc-〉AfxCallWndProc-> Wnd.WindowProc().
这里其实是程序真正的处理过程,首先判断是否为WM_COMMAND消息;不是就按照通常的方法,进行处理(查找消息映射表,由宏建立起来的内存表),
是就按照MFC规定的路线进行处理。CWnd::OnCommand()调用的是OnCmdMsg(),这里MFC规定了其消息的路线(view ,document,framewnd,winapp)。

你可能感兴趣的:(编程,windows,object,command,application,mfc)