+ -
当前位置:首页 → 问答吧 → windows消息处理过程的问题

windows消息处理过程的问题

时间:2011-11-30

来源:互联网

你好:
我想弄明白windows消息处理过程,在系统内部做了些什么?
比如说,一个界面上,有3个button。当用户点击了鼠标左键后,会产生一个鼠标左击的消息事件,然后这个消息被系统接受后,是不是放入消息队列中,然后把这个消息在分发出去(::GetMessage,::PeekMessage)(::DispatchMessage)。
这个消息产生过程中,系统怎么判断这个消息是在button1 button2 button3 form中哪个控件上发生的。也就是怎么去判断窗口句柄的。消息结构(MSG)中的hwnd是怎么产生的?多谢

作者: zhiyong1822   发布时间: 2011-11-30

MFC界面中有一个线程专门负责界面消息的处理
窗口可以接收消息和发送消息,并对消息作出响应
鼠标点击的时候,窗口发送消息,自然会包含窗口的hwnd
typedef struct tagMSG { 
  HWND hwnd; 
  UINT message; 
  WPARAM wParam; 
  LPARAM lParam; 
  DWORD time; 
  POINT pt; 
} MSG; 
在一个窗口中,每个控件的ID值唯一,也就构成了message的值
在MFC进行消息分发时会查询消息映射表,将消息发送到指定的hwnd和message的线程

作者: sky101010ws   发布时间: 2011-11-30

不好意思,还是不明白
但是消息是由鼠标点击引起的,系统接收后怎么确定的hwnd
系统怎么确定到底点击的是具体哪个按钮或者哪一个窗体。

作者: zhiyong1822   发布时间: 2011-11-30

鼠标点击后就会产生一个MSG,其中hwnd将要处理这个消息的窗口句柄,如果这个消息没有进消息队列则直接发送到(处理该消息的)窗口,进队列则DispatchMessage到指定的窗口(消息MSG中hWnd)标识的那个

作者: dahaiI0   发布时间: 2011-11-30

但是这个MSG中的hWnd,系统是怎么得到的?比如说窗体上有两个按钮but1 but2,我把鼠标放在but1上点击,这时产生MSG中的hWnd一定是but1的,系统怎么知道是but1,而不是but2的

作者: zhiyong1822   发布时间: 2011-11-30

系统怎么得到的,这个看系统怎么实现的,个人从未深究过。坐等高人解释

作者: dahaiI0   发布时间: 2011-11-30

深入浅出MFC里有讲,不过这玩意除非要做操作系统,否则了解那么清楚意义不大

作者: Kaile   发布时间: 2011-11-30

但是还是想,了解一下

作者: zhiyong1822   发布时间: 2011-11-30