MFC中SendMessage和mfc postmessage 参数的区别

c++SendMessage和PostMessage的区别
10:13:03&&&来源:&&&评论: 点击:
c++中SendMessage和PostMessage的区别
1、返回值意义的区别,先看一下 MSDN 里的声明:
LRESULT SendMessage(
&&&&&&& HWND hWnd,
&&&&&&& UINT Msg,
&&&&&&& WPARAM wParam,
&&&&&&& LPARAM lParam
BOOL PostMessage(
&&&&&&& HWND hWnd,
&&&&&&& UINT Msg,
&&&&&&& WPARAM wParam,
&&&&&&& LPARAM lParam
  其中&4 个参数的意义是一样的,返回值类型不同。PostMessage的返回值(BOOL)表示PostMessage函数执行是否正确,SendMessage的返回值(LRESULT )表示其他程序处理消息后的返回值。
2、PostMessage 是异步的,SendMessage 是同步的。
  PostMessage 只把消息放入队列,不管消息是否被处理就返回,消息可能不被处理;而 SendMessage 等待消息被处理完了之后才返回,如果消息不被处理,发送消息的线程将一直被阻塞。
3、 当一个线程向该线程所建立的窗口SendMessage消息时,由 USER32.DLL 模块调用目标窗口的消息处理程序,并将结果返回,它只是调用指定窗口的消息处理过程,并不将消息入队列。当一个线程向另一个线程所建立的窗口 SendMessage时,该消息要追加到接收消息线程的发送消息队列,然后发送消息的线程进入等待状态,接收消息的线程处理完该消息后,由系统唤醒发送 消息的线程,这时发送线程继续进行。PostMessage 发送消息时,消息要先放入线程的消息队列,然后通过消息循环分派到目标窗口(DispatchMessage)。一个线程的消息队列实际上分为四种不同的 消息队列:Post消息队列、Send消息队列、输入消息队列、应答消息队列。PostMessage是将消息追加到Post消息队列,SendMessage是追加到Send消息队列,两个队列处理的优先级并不一样。
相关热词搜索:
延伸阅读:
频道总排行
频道本月排行VC &&&&最新内容
VC &&&&随机内容91SendMessage消息大全及说明
上亿文档资料,等你来发现
91SendMessage消息大全及说明
VB.NETSendMessage(PostMe;Windows是一个消息驱动式系统,SendMe;(1)函数声明:PrivateDeclareFu;参数1:hwnd-窗口句柄;参数2:wMsg-用于区别其他消息的常量值;;参数3:wParam-通常是一个与消息有关的常量;参数4:IParam-通常是一个指向内存中数据的;(2)SendMessage与Pos
VB.NET SendMessage (PostMessage)消息大全及使用说明Windows是一个消息驱动式系统,SendMessage(PostMessage)是应用程序和应用程序之间进行消息传递的主要手段之一,这里我搜集整理了SendMessage(PostMessage)函数的详细参数介绍,以备自用。(1)函数声明: Private Declare Function SendMessage Lib “user32” Alias “SendMessageA” (ByVal hwnd As Integer, ByVal wMsg As Integer,ByVal wParam As Integer,ByVal IParam As Object) As Integer Private Declare Function PostMessage Lib &user32& Alias &PostMessageA& (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, lParam As Object) As Integer参数1:hwnd-窗口句柄。窗口可以是任何类型的屏幕对象;参数2:wMsg-用于区别其他消息的常量值;参数3:wParam-通常是一个与消息有关的常量值,也可能是窗口或控件的句柄;参数4:IParam-通常是一个指向内存中数据的指针。(2)SendMessage与PostMessage的区别PostMessage只把消息放入队列,不管其他程序是否处理都返回,然后继续执行,这是个异步消息投放函数。而SendMessage必须等待其他程序处理消息完了之后才返回,继续执行,这是个同步消息投放函数。而且,PostMessage的返回值表示PostMessage函数执行是否正确;而SendMessage的返回值表示其他程序处理消息后的返回值。如果在同一个线程内,PostMessage发送消息时,消息要先放入线程的消息队列,然后通过消息循环Dispatch到目标窗口。SendMessage发送消息时,系统直接调用目标窗口的消息处理程序,并将结果返回。SendMessage在同一线程中发送消息并不入线程消息队列。 如果在不同线程内。最好用PostThreadMessage代替PostMessage,他工作的很好。SendMessage发送消息到目标窗口所属的线程的消息队列,然后发送消息的线程等待(事实上,他应该还在做一些监测工作,比如监视QS_SENDMESSAGE标志),直到目标窗口处理完并且结果返回,发送消息的线程才继续运行。这是SendMessage的一般情况,事实上,处理过程要复杂的多。比如,当发送消息的线程监测到有别的窗口SendMessage一个消息到来时,他直接调用窗口处理过程(重入),并将处理结果返回(3)wMsg参数及说明Public Const WM_CREATE As Integer = &H01
‘创建一个窗口Public Const WM_DESTROY As Integer = &H02Public Const WM_MOVE As Integer = &H03Public Const WM_SIZE As Integer = &H05Public Const WM_ACTIVATE As Integer = &H06Public Const WM_SETFOCUS As Integer = &H07Public Const WM_KILLFOCUS As Integer = &H08Public Const WM_ENABLE As Integer = &HAPublic Const WM_SETREDRAW As Integer = &HBPublic Const WM_SETTEXT As Integer = &HCPublic Const WM_GETTEXT As Integer = &HDPublic Const WM_GETTEXTLENGTH As Integer = &HEPublic Const WM_PAINT As Integer = &HFPublic Const WM_CLOSE As Integer = &H10Public Const WM_QUERYENDSESSION As Integer = &H11Public Const WM_QUIT As Integer = &H12Public Const WM_QUERYOPEN As Integer = &H13Public Const WM_ERASEBKGND As Integer = &H14
‘当一个窗口被破坏时发送 ‘移动一个窗口 ‘改变一个窗口的大小 ‘一个窗口被激活或失去激活状态 ‘一个窗口获得焦点 ‘一个窗口失去焦点 ‘一个窗口改变成Enable状态 ‘设置窗口是否能重画 ‘应用程序发送此消息来设置一个窗口的文本 ‘应用程序发送此消息来复制对应窗口的文本到缓冲区 ‘得到与一个窗口有关的文本的长度(不包含空字符) ‘要求一个窗口重画自己 ‘当一个窗口或应用程序要关闭时发送一个信号 ‘当用户选择结束对话框或程序自己调用ExitWindows函数 ‘用来结束程序运行 ‘当用户窗口恢复以前的大小位置时,把此消息发送给某个图标‘当窗口背景必须被擦除时(例在窗口改变大小时)Public Const WM_SYSCOLORCHANGE As Integer = &H15Public Const WM_ENDSESSION As Integer = &H16Public Const WM_SHOWWINDOW As Integer = &H18Public Const WM_ACTIVATEAPP As Integer = &H1CPublic Const WM_FONTCHANGE As Integer = &H1DPublic Const WM_TIMECHANGE As Integer = &H1EPublic Const WM_CANCELMODE As Integer = &H1FPublic Const WM_SETCURSOR As Integer = &H20Public Const WM_MOUSEACTIVATE As Integer = &H21Public Const WM_CHILDACTIVATE As Integer = &H22Public Const WM_QUEUESYNC As Integer = &H23Public Const WM_GETMINMAXINFO As Integer = &H24Public Const WM_PAINTICON As Integer = &H26Public Const WM_ICONERASEBKGND As Integer = &H27Public Const WM_NEXTDLGCTL As Integer = &H28Public Const WM_SPOOLERSTATUS As Integer = &H2APublic Const WM_DRAWITEM As Integer = &H2BPublic Const WM_MEASUREITEM As Integer = &H2CPublic Const WM_VKEYTOITEM As Integer = &H2E
‘当系统颜色改变时,发送此消息给所有顶级窗口 ‘当系统进程发出WM_QUERYENDSESSION消息后,发送给应用程序,通知它对话是否结束 ‘当隐藏或显示窗口是发送此消息给这个窗口 ‘发此消息给应用程序哪个窗口是激活的,哪个是非激活的 ‘当系统的字体资源库变化时发送此消息给所有顶级窗口 ‘当系统的时间变化时发送此消息给所有顶级窗口 ‘发送此消息来取消某种正在进行的摸态(操作) ‘如果鼠标引起光标在某个窗口中移动且鼠标输入没有被捕获时,就发消息给某个窗口 ‘当光标在某个非激活的窗口中而用户正按着鼠标的某个键发送此消息给当前窗口 ‘发送给MDI子窗口,当用户点击此窗口的标题栏,或当窗口被激活,移动,改变大小 ‘由基于计算机的训练程序发送,通过WH_JOURNALPALYBACK的hook程序分离出用户输入消息‘此消息发送给窗口当它将要改变大小或位置 ‘发送给最小化窗口当它图标将要被重画 ‘此消息发送给某个最小化窗口,仅当它在画图标前它的背景必须被重画 ‘发送此消息给一个对话框程序去更改焦点位置 ‘每当打印管理列队增加或减少一条作业时发出此消息
‘当Button,ComboBox,ListBox,MENU的可视外观改变时发送 ‘当Button, ComboBox, ListBox, ListView, MENU 被创建时 ‘由一个LBS_WANTKEYBOARDINPUT风格的发出给它的所有者来响应WM_KEYDOWN消息Public Const WM_CHARTOITEM As Integer = &H2FPublic Const WM_SETFONT As Integer = &H30Public Const WM_GETFONT As Integer = &H31Public Const WM_SETHOTKEY As Integer = &H32Public Const WM_GETHOTKEY As Integer = &H33
‘由一个LBS_WANTKEYBOARDINPUT风格的列表框发送给他的所有者来响应WM_CHAR消息
‘当绘制文本时程序发送此消息得到控件要用的颜色 ‘应用程序发送此消息得到当前控件绘制文本的字体 ‘应用程序发送此消息让一个窗口与一个热键相关连
‘应用程序发送此消息来判断热键与某个窗口是否有关联Public Const WM_QUERYDRAGICON As Integer = &H37
‘此消息发送给最小化窗口,当此窗口将要被拖放而它的类中没有定义图标,应用程序能返回一个图标或光标的句柄,当用户拖放图标时系统显示这个图标或光标Public Const WM_COMPAREITEM As Integer = &H39Public Const WM_COMPACTING As Integer = &H41
‘发送此消息来判定ComboBox或ListBox新增加的项的相对位置 ‘显示内存已经很少了Public Const WM_WINDOWPOSCHANGING As Integer = &H46 ‘发送此消息给窗口的大小和位置要被改变时,来调用setwindowpos函数或其它窗口管理函数 Public Const WM_WINDOWPOSCHANGED As Integer = &H47 ‘发送此消息给窗口的大小和位置已被改变时,来调用setwindowpos函数或其它窗口管理函数 Public Const WM_POWER As Integer = &H48‘当系统将要进入暂停状态时发送此消息 ‘当一个应用程序传递数据给另一个应用程序时发送此消息‘当某个用户取消程序日志激活状态,提交此消息给程序‘当某个控件的某个事件已经发生或这个控件需要得到一些信息时,发送此消息给它的父窗口‘当用户选择某种输入语言,或输入语言的热键改变 Public Const WM_COPYDATA As Integer = &H4A
Public Const WM_CANCELJOURNA As Integer = &H4B
Public Const WM_NOTIFY As Integer = &H4E
Public Const WM_INPUTLANGCHANGEREQUEST As Integer = &H50Public Const WM_INPUTLANGCHANGE As Integer = &H51Public Const WM_TCARD As Integer = &H52
‘当平台现场已经被改变后发送此消息给受影响的最顶级窗口 ‘当程序已经初始化windows帮助例程时发送此消息给应用程序Public Const WM_HELP As Integer = &H53
‘此消息显示用户按下了F1,如果某个菜单是激活的,就发送此消息个此窗口关联的菜单,否则就发送给有焦点的窗口,如果当前都没有焦点,就把此消息发送给当前激活的窗口Public Const WM_USERCHANGED As Integer = &H54
设置信息,在用户更新设置时系统马上发送此消息 Public Const WM_NOTIFYFORMAT As Integer = &H55
Public Const WM_CONTEXTMENU As Integer = &H56
Public Const WM_STYLECHANGING As Integer = &H7C
Public Const WM_STYLECHANGED As Integer = &H7D
Public Const WM_DISPLAYCHANGE As Integer = &H7E
Public Const WM_GETICON As Integer = &H7F
Public Const WM_SETICON As Integer = &H80
Public Const WM_NCCREATE As Integer = &H81
Public Const WM_NCDESTROY As Integer = &H82
Public Const WM_NCCALCSIZE As Integer = &H83
Public Const WM_NCHITTEST As Integer = &H84
Public Const WM_NCPAINT As Integer = &H85
Public Const WM_NCACTIVATE As Integer = &H86
Public Const WM_GETDLGCODE As Integer = &H87
Public Const WM_NCMOUSEMOVE As Integer = &HA0
Public Const WM_NCLBUTTONDOWN As Integer = &HA1Public Const WM_NCLBUTTONUP As Integer = &HA2
‘当用户已经登入或退出后发送此消息给所有的窗口,当用户登入或退出时系统更新用户的具体‘公用控件,自定义控件和他们的父窗口通过此消息来判断控件是使用ANSI还是UNICODE结 ‘当用户某个窗口中点击了一下右键就发送此消息给这个窗口 ‘当调用SETWINDOWLONG函数将要改变一个或多个 窗口的风格时发送此消息给那个窗口 ‘当调用SETWINDOWLONG函数一个或多个 窗口的风格后发送此消息给那个窗口 ‘当显示器的分辨率改变后发送此消息给所有的窗口 ‘此消息发送给某个窗口来返回与某个窗口有关连的大图标或小图标的句柄 ‘程序发送此消息让一个新的大图标或小图标与某个窗口关联 ‘当某个窗口第一次被创建时,此消息在WM_CREATE消息发送前发送 ‘此消息通知某个窗口,非客户区正在销毁
‘当某个窗口的客户区域必须被核算时发送此消息 ‘移动鼠标,按住或释放鼠标时发生 ‘程序发送此消息给某个窗口当它(窗口)的框架必须被绘制时 ‘此消息发送给某个窗口仅当它的非客户区需要被改变来显示是激活还是非激活状态 ‘发送给某个与对话框程序关联的控件,windows控制方位键和TAB键使输入进入此控件通过应 ‘当光标在一个窗口非客户区内移动时发送给这个窗口,非客户区为:窗体标题栏及边框体 ‘当光标在一个窗口的非客户区同时按下鼠标左键时提交此消息 ‘当用户释放鼠标左键同时光标某个窗口在非客户区十发送此消息包含各类专业文献、生活休闲娱乐、中学教育、高等教育、应用写作文书、幼儿教育、小学教育、91SendMessage消息大全及说明等内容。 
 SendMessage消息大全及说明_IT/计算机_专业资料。SendMessage消息大全及说明Windows 是一个消息驱动式系统, SendMessage 是应用程序和应用程序之间进行消息传递的 主要手段...  SendMessage消息大全及说明_计算机软件及应用_IT/计算机_专业资料。VB的SendMessage-API VB.NET SendMessage (PostMessage)消息大全及使用说明 Windows 是一个消息驱动式...  SendMessage 消息大全及说明(B) ( 13:55:39) 转载 标签: 分类:vc 知识 it WM_IME_STARTCOMPOSITION = &H010D WM_IME_ENDCOMPOSITION = &H010...  两点补充说明:在调用 SendMessage 获取第 N 行字符...控件接收 SendMessage 消息 上面讨论了用 SendMessage ...笑话大全爆笑版 幽默笑话大全 全球冷笑话精选 68份文档...  MFC用户自定义消息SendMessage的使用_计算机软件及应用_IT/计算机_专业资料。用户自定义消息 SendMessage 的使用这里主要讲一下 mfc 中 SendMessage 的使用方法。传递...  SendMessage函数的常用消息及其应用_IT/计算机_专业资料。Windows 平台,消息驱动机制...lParam As Any) As Long 其中四个参数的含义和说明如下: 1.hWnd: 对象的句...  Windows_API大全 41页 1下载券 SendMessage参数大全 7页 免费 SendMessage(PostMessag...SendMessage 参数详解 Windows 是一个消息驱动式系统,SendMessage 是应用程序和...  这个过程就是消息处理。接下来,我们把 SendMessage ...别名 说明: 说明 SendMessageA 调用一个窗口的窗口函数...2014年笑话大全之让你笑个够 儿童笑话大全爆笑 爆笑...  vc 中怎么使用 SendMessage 自定义消息函数 vc 中怎么使用 SendMessage 自定义...幽默笑话大全 全球冷笑话精选160份文档 2014年度细分行业报告汇集 ...VC++中 PostMessage和SendMessage的区别_百度知道
VC++中 PostMessage和SendMessage的区别
提问者采纳
具体的参数情况就不为搂住列举了,相信楼主已经查过msdn. 说说区别 PostMessage只负责将消息放到消息队列中,不确定何时及是否处理 SendMessage要等到受到消息处理的返回码(DWord类型)后才继续 PostMessage执行后马上返回 SendMessage必须等
来自团队:
其他类似问题
为您推荐:
sendmessage的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 postmessage传字符串 的文章

更多推荐

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

点击添加站长微信