分类: C/C++
2012-08-28 22:33:09
Win32 程序开发与执行的流程:
.c/.cpp &.h ------->c/c++ compiler ------>.obj
Dialog
BMP
ICO ------->.rc---->Resource compiler ---->.res ------>Linker ---->.exe
CUR
Menu
---->.def (模版定义文件)
----->lib
创建应用程序
WinMain ()入口函数:
第一个参数 hInstance 是唯一的表示本程序的实例句柄。
第二个参数是本程序前一个实例句柄,一般这个参数都为空,由于32位windows 采用进程和线程模式,每一个线程都拥有自己的句柄,因此参数为空。
第三个参数:仅在程序从DOS命令行或run对话框中输入时,才起作用。
第四个参数:决定窗口初始化显示的状态。
WinMain() 函数返回一个整数作为退出码APIENTRY表示函数的调用约定,当函数被调用时,参数采用从左到右的顺序入栈。在有调用者将参数弹出栈。
APIENTRY是一个宏。
句柄:
他是用来标识应用程序建立或者使用的对象的唯一的整数,句柄的功能和指针相似,句柄具有作用域,可以嵌套,可以访问局部变量。
高级编程法:
APPWizard 可以帮助用户创建一个MFC的框架,并且自动生成这个框架所需的所的源文件。
应用CLassWizard可以直接在程序代码中根据自己需要编辑或添加函数。
使用APPWizard 应用程序向导:
单击“文件|新建“ — >”MFC AppWizard (exe)“ ----->”OK “ ---->”根据需要选择单文档还是多文档” -----> “ 完成“
后面的东西使用默认的东西。
说明:只有基于MFC类库的应用程序才能使用classWizard.
重点分析
.cpp文件中的initlnstance成员函数的分析:
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL (是应用的窗口和控件呈现3D特性)
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically (是应用的窗口和控件呈现3D特性)
#endif
SetRegistryKey(_T("Local AppWizard-Generated Applications")); //在windows Registry中创建一个应用程序的键值
LoadStdProfileSettings();
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate( //在堆中创建一个单文档模版 (new创建)
IDR_MAINFRAME, //他是用于程序资源的ID
RUNTIME_CLASS(CHelloDoc), //使用宏来设置应用文档的 ChelloDoc
RUNTIME_CLASS(CMainFrame), // main SDI frame window //窗口框架CMainFrame
RUNTIME_CLASS(CHelloView)); //视图 (ChelloView)
AddDocTemplate(pDocTemplate); //在应用程序对象中保存一个指向新模版的指针
// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo); //分析命令行
// Dispatch commands specified on the command line
if (!ProcessShellCommand(cmdInfo)) //在命令行中执行任何命令动作
return FALSE;
// The one and only window has been initialized, so show and update it.
//显示程序的主窗口,发送一个WM——PAINT消息来重画
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return TRUE;
}
AddDocTEmplate程序函数,该函数保存指向一个新文档的指针,但是AddDocTemPlate函数并没有在C…App类中列出,而在基类CWinApp中继承。
命令消息的处理过程:一个命令对象通过它继承OnCmdMsg处理函数接收一个命令消息。 通常他是检查对象的消息的映射。