MyException - 我的异常网
当前位置:我的异常网» Delphi » 自定义SendMessage消息可不可以有返回值?该怎么处理

自定义SendMessage消息可不可以有返回值?该怎么处理

www.MyException.Cn  网友分享于:2013-02-14  浏览:87次
自定义SendMessage消息可不可以有返回值?
SendMessage发出消息后
在接受消息后返回一个值,
然后在发消息的处理返回值。

可不可以?

------解决方案--------------------
可以

TMessage = packed record
Msg: Cardinal;
case Integer of
0: (
WParam: Longint;
LParam: Longint;
Result: Longint); //在消息处理中赋值
1: (
WParamLo: Word;
WParamHi: Word;
LParamLo: Word;
LParamHi: Word;
ResultLo: Word;
ResultHi: Word);
end;


------解决方案--------------------
procedure UserPro(Var Message:TMessage):message WindowsMessage
其中UserPro是用户自定义消息处理函数的名称,WindowsMessage是Windows消息常量或自定义消息常量。

delphi消息需要定义为过程,Message为返回值 TMessage的结构,
TMessage = packed record 
Msg: Cardinal; 
case Integer of 
0: ( 
WParam: Longint; 
LParam: Longint; 
Result: Longint); //在消息处理中赋值 
1: ( 
WParamLo: Word; 
WParamHi: Word; 
LParamLo: Word; 
LParamHi: Word; 
ResultLo: Word; 
ResultHi: Word); 
end; 
获得返回值:
Message.WParam
Message.LParam
Message.Result
或者
message.WParamLo
...
message.ResultHi

------解决方案--------------------
procedure UserPro(Var Message:TMessage):message WindowsMessage
其中UserPro是用户自定义消息处理函数的名称,WindowsMessage是Windows消息常量或自定义消息常量。

Message是TMessage结构的返回值,结构定义如上面的回复
------解决方案--------------------
楼上两位似乎理解错了楼主的意思。

楼主应该是想知道某个消息发送者在SendMessage一个消息后,能不能获得这个消息接收者返回的消息处理情况值。

SendMessage或者PostMessage只负责将消息送入消息队列,这两个函数的返回值都是关于消息是否正确地送入消息队列的,而不是消息接收者的处理返回值。

接收消息的程序在处理消息之后,如果想返回处理结果,则需要另外发送一个消息(包含处理结果的值)到消息队列,然后(原来的)消息发送者再接收并获得处理情况返回值。
------解决方案--------------------
如楼上所说
------解决方案--------------------
SendMessage和PostMessage的最大区别在于,前者等待消息的处理完,后者则仅仅只是投递到消息队列。所以通常建议的方式是在具有同步需要的时候,采用SendMessage,而这个时候,SendMessage的后面两个参数wParam,lParam就可以用来传送结构数据的指针,从而等到指定的消息处理线程,退出(投递失败),或者处理完成之后可以继续对wParam和lParam参数进行相应的处理。根据这样的处理机制,就可以由接收消息的线程对wParam或lParam所携带的数据指针的内容进行修改(前提是双两结构透明或一致),从而发送消息者也可以对修改后的内容进行进一步处理。
------解决方案--------------------
需要记住的是,可以对消息的返回值进行修改,也可以当wParam或lParam是一个指针的时候,对其所指向的内容进行修改,但是修改wParam或lParam本身的值,将无法实现回传。

文章评论

我的丈夫是个程序员
我的丈夫是个程序员
一个程序员的时间管理
一个程序员的时间管理
旅行,写作,编程
旅行,写作,编程
Java程序员必看电影
Java程序员必看电影
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
程序员必看的十大电影
程序员必看的十大电影
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
为什么程序员都是夜猫子
为什么程序员都是夜猫子
程序员和编码员之间的区别
程序员和编码员之间的区别
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
程序员应该关注的一些事儿
程序员应该关注的一些事儿
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
程序员的鄙视链
程序员的鄙视链
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
总结2014中国互联网十大段子
总结2014中国互联网十大段子
鲜为人知的编程真相
鲜为人知的编程真相
那些争议最大的编程观点
那些争议最大的编程观点
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
10个调试和排错的小建议
10个调试和排错的小建议
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
每天工作4小时的程序员
每天工作4小时的程序员
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
编程语言是女人
编程语言是女人
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
 程序员的样子
程序员的样子
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
我是如何打败拖延症的
我是如何打败拖延症的
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
中美印日四国程序员比较
中美印日四国程序员比较
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
老程序员的下场
老程序员的下场
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有