MFC学习笔记(一):windows程序原理

总想认真的学习一下mfc,可一直没有时间,今天下载了一个《深入浅出mfc》,准备好好研究一下,可这本书太长了,pdf文档翻到66页了,还没有进整体,所以从今天起一遍读侯捷先生的书,一变给写些笔记,给这本厚厚的数做个简化。

第一部分:windows程序原理

windows程序最重要的概念是什么事件驱动。应用程序响应事件。

          比如点击了鼠标,敲击了键盘,都是事件,windows程序是基于事件和用户进行交互。时间处理过程是怎么样的呢?

         一、创建一个窗口。设定窗口的消息处理过程

          二、进行消息循环。windows  是使用一个消息循环来维持应用程序的生命周期。这个循环不断的检索系统的消息队列,这些消息就包含了鼠标,键盘等事件

         三、消息循环中,把消息进行二次分发,把消息发送到了子窗口,这个过程是借助系统来完成的,实际上系统回调了窗口的回调函数

         四、回调函数中处理消息,比如在窗口上画控件,弹出消息框等,或者执行其他操作。

        为了便于理解,我们使用伪代码来描述这个过程。

 

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)     

     switch (message)
    {

                         ......................;
    }
    return 0;

 }

WINAPI int winmain(){

      //1.创建一个windows窗口

     // 2.设置窗口的消息处理函数

     // 3.想系统注册windows窗口

    //  3.显示窗口

   while (GetMessage(&msg, NULL, 0, 0))  {

           if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))           //翻译加速键表
           {
                TranslateMessage(&msg);                                                                           //该函数将虚拟键消息转换为字符消息
                DispatchMessage(&msg);                                                   //分发消息
           }        

   }

  以上就是一个windows应用程序的框架,核心是消息循环,不断的从系统中获取消息,DispatchMessage是个关键,他把消息发送给系统,然后系统调用窗口的窗口过程。

 

  有几点需要注意:

  1.我们的程序只有一个窗口,实际上可以有多个窗口,每个窗口有一个窗口过程,但消息循环只有一个

  2. 控件也是一个窗口(VC中的静态控件除外),也有自己的消息处理过程,不过如button等系统提供的控件,系统已经为他们预设了一个过程,这个过程收到消息后,把消息发送到了父窗口。

 

 

你可能感兴趣的:(MFC学习笔记(一):windows程序原理)