今天看了孙鑫老师的VC++教程,认为孙老师windows程序运行原理一章讲的很棒,解决了困扰我很久的一个问题:回调函数的调用过程。现在在这里回顾一下要点:
WINDOWS application 是基于消息机制的,大体过程如下:
1. application运行,OS为application建立消息队列;
2. 某个事件或用户行为发生,OS捕获后,以MSG的结构包装,扔到相应的程序的消息队列;
3. 在application的消息循环中,先GetMessage(), 再TranslateMessage(), 然后再DispatchMessage();
4. 被DispatchMessage()的消息MSG先被OS获得,然后OS解析MSG的内容,获得MSG的HWND, message , wParam, lParam等相关的数据,然后以这些数据作为参数,调用application的窗口类指定的回调函数,对消息进行相应。
5. 消息循环不断的GetMessage,直到获得WM_QUIT的消息,循环结束,程序执行完毕,退出!
注意:DestroyWindow 和 PostQuitMessage的区别,窗口销毁后程序依然执行;但是PostQuitMessage后,OS发出WM_QUIT类型的消息,WM_QUIT被dispatch后,程序结束。
姚鑫
2011/8/11
深夜于大运村舍内
WINDOWS application 是基于消息机制的,大体过程如下:
1. application运行,OS为application建立消息队列;
2. 某个事件或用户行为发生,OS捕获后,以MSG的结构包装,扔到相应的程序的消息队列;
3. 在application的消息循环中,先GetMessage(), 再TranslateMessage(), 然后再DispatchMessage();
4. 被DispatchMessage()的消息MSG先被OS获得,然后OS解析MSG的内容,获得MSG的HWND, message , wParam, lParam等相关的数据,然后以这些数据作为参数,调用application的窗口类指定的回调函数,对消息进行相应。
5. 消息循环不断的GetMessage,直到获得WM_QUIT的消息,循环结束,程序执行完毕,退出!
注意:DestroyWindow 和 PostQuitMessage的区别,窗口销毁后程序依然执行;但是PostQuitMessage后,OS发出WM_QUIT类型的消息,WM_QUIT被dispatch后,程序结束。
姚鑫
2011/8/11
深夜于大运村舍内