peekmessage,getmessage等的用法(100分)

  • 主题发起人 主题发起人 kevincsg
  • 开始时间 开始时间
K

kevincsg

Unregistered / Unconfirmed
GUEST, unregistred user!
peekmessage,getmessage,DispatchMessage,TranslateMessage,postthreadmessage等的用法,请各位大虾详细说一下
它们的作用,小弟想知道一些实战经验.谢谢
 
大家帮帮忙,小弟E文不太好
 
Peekmessage() 从消息队列中读消息
Getmessage() 可以有选择的从消息列表中得到消息
DispatchMessage() 用来派送消息到窗口过程
TranslateMessage() 用于将Virtul-Key消息翻译为字符消息
Postthreadmessage() 用于向线程发送消息
Postmessage() 用于将消息传送到窗口的消息队列
例子可以去网上找找!
 
是你太懒了吧??????????????????、
 
谢谢YB_unique
给个网址吧,(最好给个实例)
 
看看Application.ProcessMessages的源代码啊!!!
 
多谢Kingron,简单易懂
 
大家能说说DispatchMessage是实际作用吗?
因为给我的感觉是已经处理了消息,为什么再DispatchMessage???
 
是不是太简单懒得回答,还是没人会,
 
看看书本就OK了。
 
上面的函数一般使用中的顺序:
0 SendMessage
1 PeekMessage or Getmessage
2 TranslateMessage
3 DispatchMessage
4 Postmessage
DispatchMessage用来派送消息,当然是有用的!
如:
while(GetMessage(Msg, Handle, 0, 0))do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
 
YB_unique兄,你可能搞错了吧,PeekMessage or Getmessage只能处理postthreadmessage发的消息,
不信你去看看MSDN,我在程序里也试过,getmessage根本就不能拦截sendmessage等发的消息
继续请大家指点,DispatchMessage更深一部的作用?
希望大家一起探讨,一起研究
 
SendMessage函数本就是不经过消息队列而直接发送给窗口的。Getmessage当然拦截不到!
 
"SendMessage函数本就是不经过消息队列而直接发送给窗口的。Getmessage当然拦截不到!"
你说的这点虽然对,但你还是没有回答我的问题
继续请大家指点,DispatchMessage更深一部的作用?
希望大家一起探讨,一起研究
 
PeekMessage()函数。下面是它的原形:
BOOL PeekMessage(
LPMSG lpMsg, // pointer to structure for message
HWND hWnd, // handle to window
UINT wMsgFilterMin, // first message
UINT wMsgFilterMax, // last message
UINT wRemoveMsg // removal flags
);
这是一个布尔类型,也就是一个int型,不过只有两个值,TRUE和FALSE,如果有一条消息在队列中等待,函数返回
TRUE,否则,返回FALSE。它的参数很简单:
LPMSG lpMsg:这是一个MSG类型的指针变量。如果有消息在等待,消息信息将被填入该变量。
HWND hWnd:你所要检查的消息队列的窗口的句柄。
UINT wMsgFilterMin,wMsgFilterMax:索引第一个和最后一个消息,一般你都从第一个消息开始检索,所以把它们
都设置为0好了。
UINT wRemoveMsg:一般来说,它有两个值,PM_REMOVE或者PM_NOREMOVE。使用前者会在消息被读取后从队列中移除,
后者是继续保留。通常,我们选择前者PM_REMOVE。
真正处理消息时,你需要做两件事,很简单,第一件是TranslateMessage(),第二件是DispatchMessage()。它们的原
形很相似:
BOOL TranslateMessage(CONST MSG *lpmsg);
把消息翻译过来
LONG DispatchMessage(CONST MSG *lpmsg);
从MSG结构中调用相应的信息。
PostMessage()被经常用来向队列中加入消息,成功,返回TRUE,否则,返回FALSE。它只是简单的把消息加入到队列中,
然后返回。多数情况下,调用它将返回TRUE。
SendMessage()则有些不同,它并不是把消息加入到队列里,而是直接翻译消息和调用消息处理,直到消息处理完成后才
返回。所以,SendMessage()比PostMessage()有更高的应急性。你想立刻干的事情,就应该调用它。
 
DispatchMessage将处理后的消息发回Windows,由Windows自己处理,
它所完成的工作就是把当前消息分发到相关的窗口过程。然后窗口过程根据消息的类型对不同的消息进行相关处理。
难道还有问题???
 
多人接受答案了。
 
我Kao,怎么老是收不到邮件?
 
后退
顶部