1)操作系统通过RIT(raw input thread,RIT)等待系统硬件输入队列(system hardware input queue,SHIQ)的消息,一旦鼠标或键盘发生操作,系统就向SHIQ添加一条硬件事件,这时RIT将被唤醒,并从SHIQ中取出这个事件,转换成适当的WM_KEY***、WM_?BUTTON***、WM_MOUSEMOVE等消息添加到适当线程消息队列(VIQ)中,RIT判断适当线程的机制:
  1.对于鼠标消息,RIT只是确定是哪一个窗口在鼠标光标之下。利用这个窗口,RIT调用GetWindowThreadProcessID来确定是哪一个线程建立了这个窗口,那么就把消息发送到这个线程的线程消息队列(VIQ)中。
  2.对于按键消息,在 任何时刻只有一个线程与RIT“连接”,与之相连的这个线程称为前景线程(foreground thread),也就是说RIT将把消息发送到建立当前获得焦点的窗口的线程的线程的线程消息队列(VIQ)中。(这句话有点拗口^_^)。
2)以上回答了这个问题。
注:以上摘自《Windows 核心编程》第27章

解决方案 »

  1.   

    回楼上我的意思是比如象MFC里看到的窗口 按钮 菜单等 和 魔兽世界里所看到的按钮 窗口 菜单等是完全不同的概念~~
    我认为 MFC里看到的这些东西其实都是windows窗口,象鼠标是否在窗口矩形里面/按钮是否被按下(判断鼠标在按钮矩形里面才算是按下)这些计算鼠标和窗口矩形的碰撞检测是由操作系统完成的;而魔兽世界里的判断鼠标是否在窗口范围内/鼠标是否碰撞了按钮等都是在程序员写的代码.
      

  2.   

    4楼回复的很正确,也很准确。
    ^_^。
    赞一个楼主的楼上回答,完全在程序加上这些Event。