Chinaunix首页 | 论坛 | 博客
  • 博客访问: 373098
  • 博文数量: 55
  • 博客积分: 1033
  • 博客等级: 少尉
  • 技术积分: 603
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-21 13:36
文章存档

2013年(4)

2012年(51)

分类: 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 是唯一的表示本程序的实例句柄。

第二个参数是本程序前一个实例句柄,一般这个参数都为空,由于32windows 采用进程和线程模式,每一个线程都拥有自己的句柄,因此参数为空。

第三个参数:仅在程序从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处理函数接收一个命令消息。 通常他是检查对象的消息的映射。

阅读(1372) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~