windows消息队列通过什么传递

天极传媒:天极网全国分站
您现在的位置: &&
深度解析VC中的消息传递机制
论坛 14:59
  摘要:Windows编程和Dos编程,一个很大的区别就是,Windows编程是事件驱动,消息传递的。所以,要学好Windows编程,必须对消息机制有一个清楚的认识,本文希望能够对消息的传递做一个全面的分析。
  什么是消息?  消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉。一个消息,是系统定义的一个32位的值,他唯一的定义了一个事件,向Windows发出一个通知,告诉程序某个事情发生了。例如,单击、改变窗口尺寸、按下上的一个键都会使Windows发送一个消息给应用程序。  消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标。这个记录类型叫做MSG,MSG含有来自windows应用程序消息队列的消息信息,它在Windows中声明如下:typedef struct tagMsg{HWND 接受该消息的窗口句柄UINT 消息常量标识符,也就是我们通常所说的消息号WPARAM wP 32位消息的特定附加信息,确切含义依赖于消息值LPARAM lP 32位消息的特定附加信息,确切含义依赖于消息值DWORD 消息创建时的时间POINT 消息创建时的鼠标/光标在屏幕坐标系中的位置}MSG;  消息可以由系统或者应用程序产生。系统在发生输入事件时产生消息。举个例子, 当用户敲键, 移动鼠标或者单击控件。系统也产生消息以响应由应用程序带来的变化, 比如应用程序改变系统字体改变窗体大小。应用程序可以产生消息使窗体执行任务,或者与其他应用程序中的窗口通讯。
  消息中有什么?  我们给出了上面的注释,是不是会对消息结构有了一个比较清楚的认识?如果还没有,那么我们再试着给出下面的解释:  hwnd 32位的窗口句柄。窗口可以是任何类型的屏幕对象,因为Win32能够维护大多数可视对象的句柄(窗口、对话框、按钮、编辑框等)。  message用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也可以是自定义的常量。消息标识符以常量命名的方式指出消息的含义。当窗口过程接收到消息之后,他就会使用消息标识符来决定如何处理消息。例如、WM_PAINT告诉窗口过程窗体客户区被改变了需要重绘。符号常量指定系统消息属于的类别,其前缀指明了处理解释消息的窗体的类型。  wParam 通常是一个与消息有关的常量值,也可能是窗口或控件的句柄。  lParam 通常是一个指向中数据的指针。由于WParam、lParam和Pointer都是32位的,因此,它们之间可以相互转换。
(作者:hustli责任编辑:方舟)
欢迎在新浪微博上关注我们
笔记本手机数码家电
document.write(""); 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
Windows消息传递机制
下载积分:30
内容提示:在windows版发了一个,感觉还是发在这里比较合适。最近在做聊天..
文档格式:PDF|
浏览次数:323|
上传日期: 22:54:26|
文档星级:
该用户还上传了这些文档
Windows消息传递机制.PDF
官方公共微信关于mvvm模式中消息传递的疑问
软件环境: phone 7.1
硬件环境:lumia 800
框架:mvvmlight
问题描述:
A页面为数据列表页面,B页面为数据detail页面,点击A页面的某一数据项跳转到B页面,同时需要将数据项的ID转递给B页面,这样B页面可以获取相应的细节数据。
这里不讨论普通的传递方式,用mvvmlight的话 操作流程如下:
在A页面的listbox里添加TapCommand
&i:Interaction.Triggers&
&&& &i:EventTrigger EventName=&Tap&&
&&&&&&& &cmd:EventToCommand Command=&{Binding TapMailCommand}& CommandParameter=&{Binding SelectedItem,ElementName=lstInbox}&/&
&&& &/i:EventTrigger&
&/i:Interaction.Triggers&
这样在A页面的viewModel里注册此TapCommand事件到方法中,因为viewModel看不到view,所以需要发送一个uri消息并将点击到的id信息随同uri一起通过Messenger发送给A页面的code-behind页面。
privatevoid NavigatedToReadMail(string sMailId)
&{ Messenger.Default.Send&string&(@&/Ui/ReadDoumail.xaml?MailId=&+ sMailId, &Navigate&);
在A页面的code-behind里接收
protectedoverridevoid OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
Messenger.Default.Register&string&(this, &Navigate&, uri =& { if (uri !=null) { NavigationService.Navigate(new Uri(uri, UriKind.Relative)); } } ); base.OnNavigatedTo(e);
这样即实现了跳转到B页面,同时,在B页面中接收uri及随同的id消息
protectedoverridevoid OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
string sMailId =string.E NavigationContext.QueryString.TryGetValue(&MailId&,out sMailId);
ViewModelLocator.DoumailStatic.GetMail(sMailId);
&base.OnNavigatedTo(e);
我的疑问在此,原来的思路是将NavigationContext获取到的信息绑定到B页面的某个控件中,并通过B页面的某个带参数的command事件将获取到的信息传递给到B页面的viewModel中并绑定B页面的某个方法中更新B页面的UI。 后来朋友告诉我直接用红色的语句实现,我总觉得这样看起来有点怪怪的,这样有破坏mvvm的原则么? 忘了在哪里看过有文章说尽量不在code-behind中写逻辑?可我觉得有时候不用code-behind会太憋屈。 请大家一起讨论一下关于mvvm中的消息模式应该如何考虑。
摘自 淡如水
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。windows消息传递 - CSDN博客
对于Windows消息的理解要先了解一下Window消息的背景。 &&
&&在Windows3.1里,控件会将mouse, & keybord等等的消息通知它的父窗口, & 使用的消息就只有WM_COMMAND, & 事件种类和控件ID被包含在wParam中, & 控件的句柄包含在lParam中。由于wParam和 & lParam已经满了,当控件要向父窗口发送其它特殊消息同时附带很多信息的时候就没有地方可以存放它们了。所以Windows3.1中定义了许多其它的消息种类,比如WM_VSCROLL, & WM_CTLCOLOR等等,每种消息wParam,lParam中附带的信息是不同的。 &&
&& & &当到了Win32后,控件的种类越来越多,当然不可以为每一个控件都定义一套消息,这样也不利于系统的扩充。所以在Win32中定义了唯一一个强大的消息WM_NOTIFY。当然WM_NOTIFY也遵守原来的消息规则,既只带参数wParam和lParam。唯一不同处在于,此时的lParam中传送的是一个NMHDR指针。不同的控件可以按照规则对NMHDR进行扩充,因此WM_NOTIFY消息传送的信息量可以相当的大,这个可以看看MSDN中的相关说明,TreeControl中就有很多这种消息。 &&
&&现在就可以知道为什么有ON_MESSAGE & ,ON_COMMAND, & , & ON_NOTIFY了。 &&
&&ON_MESSAGE是处理所有的Windows的消息的,因为所有的消息都以相同的格式传送,也就是ID, & WPARAM, & LPARAM. &&
&&ON_COMMAND是专门处理WM_COMMAND消息的,这样我们就不用自己解开WM_COMMAND中wParam和lParam中传送的控件ID, & 事件种类&,所有的都在MFC内部解决了:),当然方便了。 &&
&&ON_NOTIFY更是不用说了,看看他的处理函数,是不是把NMHDR解出来了。 &&
&&这样一样就一目了然了,ON_COMMAND和ON_NOTIFY都可以用ON_MESSAGE来处理,只不过自己要多做很多事情。ON_COMMAND和ON_NOTIFY最好就不要互换了! &&
ON_COMMAND用来处理WM_COMMAND消息。老式的windows控件发送WM_COMMAND作为对父窗口的通知消息。另外,菜单,工具栏也向框架窗口发送WM_COMMAND消息。
ON_MESSAGE主要用来处理用户自定义消息。 &&
&& & & &对于某些新型的windows控件(如ListCtrl等),向父窗口发送通知消息时需要包含大量的信息,WM_COMMAND已不适应这种要求(因为WM_COMMAND的wparam和lparam都已经填满了),ON_NOTIFY主要用来处理这些新型的windows控件向父窗口的发送的WM_NOTIFY通知消息。C++演示如何传递消息 机制是WINDOWS编程的基础,只有深入了解了才能更好地编写 程序,此代码 Develop 182万源代码下载-
&文件名称: C++演示如何传递消息
& & & & &&]
&&所属分类:
&&开发工具: C++
&&文件大小: 9 KB
&&上传时间:
&&下载次数: 147
&&提 供 者:
&详细说明:消息传递机制是WINDOWS编程的基础,只有深入了解了才能更好地编写WINDOWS程序,此代码就向你展现了消息传递的内幕-the mechnism of message transfering is the basis of windows programming. Untile a through understanding has been made, one can have a good command of windows programming. This program shows you the inner working principle of message transfering.
文件列表(日期:~)(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&&&&&&&MESSAGE.CFG&&&&MESSAGE.MAK&&&&&&&&
&相关搜索:
&输入关键字,在本站182万海量源码库中尽情搜索:
&[] - 它将记录所有的按键。示范了如何写一个全局钩子,记录密码,并将之发送给您的邮箱。
&[] - PDIUSBD12固件控制源码
&[] - 想学习好VC-MFC的朋友这是一本很好的书,希望大家天天向上,作个高级程序员
&[] - 关于自定义消息的说明以及自定义消息的使用方法
&[] - VC下进行窗口和线程间,窗口之间通信通常采用消息机制,这个例子比较全面,应用到了具体工程
&[] - 这是个水中倒影的效果,是用java作的,利用图象的copyArea方法
&[] - 本文从信号量、管程和消息传递三个方面讨论了进程间的同步问题,并分别给出了关于生产者/消费者问题的解决算法,最终还分析了以上三种方法的优缺点。
&[] - web传呼,经典实用,用它可以实现网页聊天就像WebQQ一样
&[] - VS2005开发的winsock网络聊天室程序,C/S模式,支持多人同时聊天,控件自动适应窗口大小,通过服务器将数据转发至其他客户端}

我要回帖

更多关于 windows消息机制 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信