Vs中c++应用程序开发:
1、SDK中的流程
开发一个带界面的SDK程序大致流程是这样的.首先自然是要有个main函数做入口点.然后按下面的步骤来(为了讨论方便,只说大概流程,代码也是不完整的)
int_tWinain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, intnCmdShow)
{
MSG msg;
InitApplicatio(HINSTANCE hInstance) //第1步,注册窗体类,并在这里指定了窗体过程WndProc
InitInstance(HINSTANCEhInstance, int nCmdShow) //第2步,创建窗体
while(GetMessage(&msg, NULL, 0, 0)) //第3步消息循环,分派消息
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return(int) msg.wParam; //第4步,退出程序
}
BOOL InitApplicatio(HINSTANCEhInstance)
{
returnRegisterClass(...);
}
BOOL InitInstance(HINSTANCEhInstance, int nCmdShow)
{
CreateWindow(...);//创建窗体
ShowWindow(...);//显示窗体
UpdateWindow(...);//送出WM_PAINT
returnTRUE;
}
LRESULTCALLBACK WndProc(...){} //窗口函数
2、MFC开发
MFC中有main函数,但是由系统去调用.然后main函数里面执行的操作差不多,只不过它是通过CWinApp和CWinThread的指针去调用一些相关的函数.
AfxWinInit函数:创建当前应用程序主线程
InitApplication函数:初始化CWINAPP类的一些内部东西,对编程人员来说无意义
InitInstance函数: 内部通过Create()函数来完成窗口的注册,创建更新和显示。
Run函数:内部就是真正的消息循环机制了(TraslateMessage和DisPatchMessage)。
在一个windows程序中,winmain函数作为程序的入口函数,一个程序的是:设计窗口(给窗口设置相应的属性)——>注册窗口——>创建窗口——>显示并且更新窗口——>消息循环;
但是当创建一个MFC程序时候,并没有看到winmain函数之类的东西,并且之前的程序框架与MFC也大有不同。现在,先来看看MFC中的程序框架以及程序运行机制吧。
由于MFC是对其SDK的封装,所以程序运行逻辑方式应该是一样的。
在MFC程序中,同样还是有winmain函数参与,但是这个WinMain函数是在程序编译连接时,由链接器将该函数链接到程序的。知道WinMain的存在后,那么WinMain又是怎么跟其他类组织在一起的呢?
(1)CxxxApp中,有一个theApp对象的全局对象,该对象就表示了应用程序本身。 对于全局对象theApp,它是在程序进入WinMain函数之前为其分配的空间,同时,定义其时候会调用它的构造函数。在程序中看到CxxxApp是CWinApp的子类,当调用CxxxApp的构造函数之前,会调用其父类的构造函数。程序的初始化在CWinApp构造函数完成。
(2)AfxWinMain函数:WinMain函数实际上是通过调用AfxWinMain函数来完成其功能的。AfxWinMain源代码在MFC源代码的WINMAIN.CPP文件中。AfxWinMain