zoukankan      html  css  js  c++  java
  • 以消息为基础,以事件驱动之(message based, event driven) 《深入浅出MFC》

      Windows 程序的进行系依靠外部发生的事件驱动。换句话说,程序不断等待(利用一个while 回路),等待任何可能的输入,然后做判断,然后再做适当的处理

      上述的「输入」是由操作系统捕捉到之后,以消息形式(一种数据结构)进入程序之中。

      操作系统通过USER模块(WINDOWS三大模块之一)捕捉外围设备(如键盘和鼠标)所发生的事件。

      应用程序获得的2类输入:

        由硬件装置所产生的消息(如鼠标移动或键盘被按下),放在系统队列(system queue)

        由Windows 系统或其它Windows 程序传送过来的消息,放在程序队列(application queue)中。

      以应用程序的眼光来看,消息就是消息,来自哪里或放在哪里其实并没有太大区别,反正程序调用GetMessage API 就取得一个消息,程序的生命靠它来推动。

    所有的GUI 系统,包括UNIX的X Window 以及OS/2 的Presentation Manager,都像这样,是以消息为基础的事件驱动系统。

      可想而知,每一个Windows 程序都应该有一个回路如下:

     1 MSG msg;
     2 while (GetMessage(&msg, NULL, NULL, NULL)) {
     3 TranslateMessage(&msg);
     4 DispatchMessage(&msg);
     5 }
     6 
     7 // 以上出现的函数都是Windows API 函数消息,也就是上面出现的MSG 结构,其实是Windows 内定的一种资料格式:
     8 /* Queued message structure */
     9 typedef struct tagMSG
    10 {
    11 HWND hwnd;
    12 UINT message; // WM_xxx,例如WM_MOUSEMOVE,WM_SIZE...
    13 WPARAM wParam;
    14 LPARAM lParam;
    15 DWORD time;
    16 POINT pt;
    17 } MSG;

     

  • 相关阅读:
    Neoj4安装使用教程
    毕业设计每日博客——第五周3
    毕业设计每日博客——第五周2
    不知道为什么,我就是被这个冒号迷惑了
    对items函数的理解
    关于运算符+的一点想法
    请使用迭代查找一个list中最小和最大值,并返回一个tuple
    Python中最常见括号()、[]、{}的区别
    ping和telnet的区别
    SQL注入原理
  • 原文地址:https://www.cnblogs.com/johnpher/p/2732066.html
Copyright © 2011-2022 走看看