关于windows消息机制的理解解决办法
关于windows消息机制的理解
当鼠标点击一个菜单项时:
1)、将鼠标点击事件封装成一个消息发送到消息队列中
2)、系统根据消息中的位置信息(即坐标)获取消息所要发送的窗口,若该窗口未激活则激活之
3)、窗口接受消息
4)、窗口根据消息的位置信息获取鼠标所要点击的菜单项,并采取相应的操作
也就是说系统判断鼠标点击所要执行的操作的唯一根据就是消息中的point(即位置信息)
请问是不是应该这样理解?
------解决方案--------------------
1、是对的;
2、应该是根据消息的影射机制;
3、对;
4、也算对吧。
------解决方案--------------------
如果是单击差不多就是这样,如果是双击还要判断和上一次点击的时间间隔以及两次点击鼠标的位置。
另外发送给窗口的时候,坐标应该是已经从屏幕坐标转换成窗口坐标了。
------解决方案--------------------
除了Point之外,系统需要知道所有窗口的Z-Order和大小范围,同时还会发送WM_NCHITTEST消息按顺序询问各个窗口是否被点击中
------解决方案--------------------
鼠标点击菜单,则鼠标设备驱动程序,向系统硬件输入队列(SHIQ)增加一个鼠标硬件事件,唤醒原始输入线程(RIT)。RIT从SHIQ提取鼠标事件,将事件转换为适当的鼠标消息。RIT在将消息置入适当线程的虚拟输入队列(VIQ)中(RIT只是确定是哪一个窗口在鼠标光标之下,利用这个窗口hWnd,RIT调用GetWindowThreadProcessId来确定是哪个线程建立了窗口。窗口线程从VIQ中取出鼠标消息,根据消息的uMsg,wParam,lParam参数在窗口函数 WindowProc 中做相应的动作。
当鼠标点击一个菜单项时:
1)、将鼠标点击事件封装成一个消息发送到消息队列中
2)、系统根据消息中的位置信息(即坐标)获取消息所要发送的窗口,若该窗口未激活则激活之
3)、窗口接受消息
4)、窗口根据消息的位置信息获取鼠标所要点击的菜单项,并采取相应的操作
也就是说系统判断鼠标点击所要执行的操作的唯一根据就是消息中的point(即位置信息)
请问是不是应该这样理解?
------解决方案--------------------
1、是对的;
2、应该是根据消息的影射机制;
3、对;
4、也算对吧。
------解决方案--------------------
如果是单击差不多就是这样,如果是双击还要判断和上一次点击的时间间隔以及两次点击鼠标的位置。
另外发送给窗口的时候,坐标应该是已经从屏幕坐标转换成窗口坐标了。
------解决方案--------------------
除了Point之外,系统需要知道所有窗口的Z-Order和大小范围,同时还会发送WM_NCHITTEST消息按顺序询问各个窗口是否被点击中
------解决方案--------------------
鼠标点击菜单,则鼠标设备驱动程序,向系统硬件输入队列(SHIQ)增加一个鼠标硬件事件,唤醒原始输入线程(RIT)。RIT从SHIQ提取鼠标事件,将事件转换为适当的鼠标消息。RIT在将消息置入适当线程的虚拟输入队列(VIQ)中(RIT只是确定是哪一个窗口在鼠标光标之下,利用这个窗口hWnd,RIT调用GetWindowThreadProcessId来确定是哪个线程建立了窗口。窗口线程从VIQ中取出鼠标消息,根据消息的uMsg,wParam,lParam参数在窗口函数 WindowProc 中做相应的动作。