YR面试——windows消息机制流程及SendMessage和PortMessage区别
来源:互联网 发布:mac官网彩妆 编辑:程序博客网 时间:2024/05/16 16:19
这又是一道面试题,回来后赶紧总结一下哈。
Windows操作系统最大的特点就是其图形化的操作界面,其图形化界面是建立在其消息处理机制这个基础之上的。
一。在windows中有一个系统消息队列,对于每一个正在执行的windows应用程序,系统为其建立一个用来存放可能创建的各种窗口的消息即的应用程序队列——“消息队列”。应用程序中有一段称作“消息循环”的代码。
while(GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}msg变量是型态为MSG的结构,型态MSG在WINUSER.H中定义如下:
typedef struct tagMSG
{
HWND hwnd ;
UINT message ;
WPARAM wParam ;
LPARAM lParam ;
DWORD time ;
POINT pt ;
}
MSG, * PMSG ;
POINT数据型态也是一个结构,它在WINDEF.H中定义如下:
typedef struct tagPOINT
{
LONG x ;
LONG y ;
}
POINT, * PPOINT;
TranslateMessage(&msg); 将msg结构传给Windows,进行一些键盘转换。(关于这一点,我们将在第六章中深入讨论。)
DispatchMessage(&msg);又将msg结构回传给Windows。然后,Windows将该消息发送给适当的窗口消息处理程序,让它进行处理。这也就是说,Windows将呼叫窗口消息处理程序。在HELLOWIN中,这个窗口消息处理程序就是WndProc函数。处理完消息之后,WndProc传回到Windows。此时,Windows还停留在DispatchMessage呼叫中。在结束DispatchMessage呼叫的处理之后,Windows回到HELLOWIN程序中,并且接着从下一个GetMessage呼叫开始消息循环。
SendMessage()与PostMessage()之间的区别:
它们两者是用于向应用程序发送消息的。PostMessagex()将消息直接加入到应用程序的消息队列中,不等程序返回就退出;而SendMessage()则刚好相反,应用程序处理完此消息后,它才返回。我想下图能够比较好的体现这两个函数的关系:
函数peekmessage和getmessage的区别?
1.GetMessage将等到有合适的消息时才返回,而PeekMessage只是撇一下消息队列。
2.GetMessage会将消息从队列中删除,而PeekMessage可以设置最后一个参数wRemoveMsg来决定是否将消息保留在队列中。
- YR面试——windows消息机制流程及SendMessage和PortMessage区别
- SendMessage和PostMessage及Windows消息机制简介
- Windows消息机制的流程及PreTranslateMessage作用和使用方法
- Windows消息机制的流程及PreTranslateMessage作用和使用方法
- SendMessage和PostMessage发送windows消息的区别
- Windows消息机制流程
- Windows消息机制流程
- 【Android消息处理机制】Handler中sendEmptyMessage与sendMessage的区别和sendMessageAtTime()与sendEmptyMessageDelay()区别
- 【Android消息处理机制】Handler中sendEmptyMessage与sendMessage的区别和sendMessageAtTime()与sendEmptyMessageDelay()区别
- 【Android消息处理机制】Handler中sendEmptyMessage与sendMessage的区别和sendMessageAtTime()与sendEmptyMessageDelay()区别
- 【Android消息处理机制】Handler中sendEmptyMessage与sendMessage的区别和sendMessageAtTime()与sendEmptyMessageDelay()区
- Windows API——Sendmessage中的消息值
- 非系统消息的使用方法及SendMessage()和PostMessage()的区别
- Windows消息函数 - SendMessage
- SendMessage->>Windows消息大全
- SendMessage->>Windows消息大全
- 消息传递机制(postmessage与sendmessage的区别)
- MFC中发送自定义消息机制,PostMessage和SendMessage方式
- Java 反射 2
- string浅拷贝及其在dll中运用的注意事项
- HDU 2899 求导+二分
- 几种编译错误一
- iconv_substr截取php中英文混排字符串
- YR面试——windows消息机制流程及SendMessage和PortMessage区别
- [模拟器问题] 关于ActivityManager: Error: Activity class {..} does not exist. 的解决
- alkacon oamp comments的使用
- C语言中,strstr函数的功能
- 马云经典语录
- 怎样做好项目计划
- JavaScript RegExp Object
- Sqlserver数据库表重设置自增主键ID号
- 浮动元素的两端对齐