关闭

《深入浅出MFC》

597人阅读 评论(0) 收藏 举报
以消息为基础,以事件驱动之(message based, event driven) Windows 程序的进行系依靠外部发生的事件来驱动。换句话说,程序不断等待(利用一个while 回路),等待任何可能的输入,然后做判断,然后再做适当的处理。上述的「输入」是由操作系统捕捉到之后,以消息形式(一种数据结构)进入程序之中。操作系统如何捕捉外围设备(如键盘和鼠标)所发生的事件呢?噢,USER 模块掌管各个外围的驱动程序,它们各有侦测回路。如果把应用程序获得的各种「输入」分类,可以分为由硬件装置所产生的消息(如鼠标移动或键盘被按下),放在系统队列(system queue)中,以及由Windows 系统或其它 Windows 程序传送过来的消息,放在程序队列(application queue)中。以应用程序的眼光来看,消息就是消息,来自哪里或放在哪里其实并没有太大区别,反正程序调用 GetMessage API 就取得一个消息,程序的生命靠它来推动。所有的GUI 系统,包括UNIX 的X Window 以及OS/2 的Presentation Manager,都像这样,是以消息为基础的事件驱动系统。可想而知,每一个Windows 程序都应该有一个回路如下: MSG msg; while (GetMessage(&msg, NULL, NULL, NULL)) { TranslateMessage(&msg); DispatchMessage(&msg); } // 以上出现的函数都是Windows API 函数消息,也就是上面出现的MSG 结构,其实是Windows 内定的一种资料格式: /* Queued message structure */ typedef struct tagMSG { HWND hwnd; UINT message; // WM_xxx,例如WM_MOUSEMOVE,WM_SIZE... WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG; 接受并处理消息的主角就是窗口。每一个窗口都应该有一个函数负责处理消息,程序员必须负责设计这个所谓的「窗口函数」(window procedure,或称为window function)。如果窗口获得一个消息,这个窗口函数必须判断消息的类别,决定处理的方式。以上就是Windows 程序设计最重要的观念。
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:434422次
    • 积分:4749
    • 等级:
    • 排名:第6325名
    • 原创:34篇
    • 转载:140篇
    • 译文:0篇
    • 评论:84条
    文章分类
    最新评论