今天的演示内容,在网上随便搜索就能搜索到一箩框,更有许多讲解非常精辟的文章。 我再三思考还是有写的必要, 原因有三: 

1.  自己对Win32程序结构再也梳理学习一下;

2.  它是Windows 开发基础和前提;

3.  做为自己后期程序开发模板;

 

      那我们开始吧!

      众所周知, Windows 是消息驱动系统, 用户的所有行为和事件都被Windows 转成消息。而软件开发人员则通过消息来实现与Windows交互从而实现用户业务。那Windows 内部又是怎么处理的呢? 对消息的处理是我们Win32程序的根本, 因而我们就从消息的生命周期来着手讲解,  消息生命周期可以简单的概括成几个过程:

a.  消息产生:  Windows 监控所有的具有输入事件硬件设备,当系统收到设备输入事件时, Windows 将对应的事件转成消息, 从而消息就产生了;

b.  消息投递:  每个消息都有一个目标窗体接收,而目标窗体应用程序都会有消息队列,当Windows 产生消息后就直接投递到其消息队队中,从而实现了Windows 消息到应用程序的传递;

c.  消息处理:  应用程序自身会不断的从自己的消息队列中获取消息并进行消息转换以及消息分发给Windows, 由Windows 回调应用程序的消息处理函数, 每一个消息必须被处理,

                  若用户发现自己不关心的消息时并系统去处理, 从而实现了用户的行为得到了交互.

如图:

【Demo 0002】Win32 程序结构

                                                              (图1)

讲解了消息生命周期后,我们进入主题,再来看看Win32的程序结构:

  • BOOL WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPTSTR szCmdLine, int nShowCmd)
  • {
  •     const TCHAR* szClsName    = _T("Win32_APP");
  •     const TCHAR* szCaption    = _T("Win32 APP");
  •  
  •     if (RegisterWndClass(hInstance, szClsName) )
  •     {
  •         HWND hWnd = CreateWnd(hInstance, szClsName, szCaption);
  •         if (NULL != hWnd && IsWindow(hWnd))
  •         {
  •             ShowWnd(hWnd);
  •  
  •             RunMessageLoop();
  •         }
  •     }
  •  
  •     return TRUE;
  • }
  • 相关文章: