K kevincsg Unregistered / Unconfirmed GUEST, unregistred user! 2001-12-04 #1 peekmessage,getmessage,DispatchMessage,TranslateMessage,postthreadmessage等的用法,请各位大虾详细说一下 它们的作用,小弟想知道一些实战经验.谢谢
peekmessage,getmessage,DispatchMessage,TranslateMessage,postthreadmessage等的用法,请各位大虾详细说一下 它们的作用,小弟想知道一些实战经验.谢谢
Y YB_unique Unregistered / Unconfirmed GUEST, unregistred user! 2001-12-04 #3 Peekmessage() 从消息队列中读消息 Getmessage() 可以有选择的从消息列表中得到消息 DispatchMessage() 用来派送消息到窗口过程 TranslateMessage() 用于将Virtul-Key消息翻译为字符消息 Postthreadmessage() 用于向线程发送消息 Postmessage() 用于将消息传送到窗口的消息队列 例子可以去网上找找!
Peekmessage() 从消息队列中读消息 Getmessage() 可以有选择的从消息列表中得到消息 DispatchMessage() 用来派送消息到窗口过程 TranslateMessage() 用于将Virtul-Key消息翻译为字符消息 Postthreadmessage() 用于向线程发送消息 Postmessage() 用于将消息传送到窗口的消息队列 例子可以去网上找找!
K kevincsg Unregistered / Unconfirmed GUEST, unregistred user! 2001-12-04 #5 谢谢YB_unique 给个网址吧,(最好给个实例)
K Kingron Unregistered / Unconfirmed GUEST, unregistred user! 2001-12-05 #6 看看Application.ProcessMessages的源代码啊!!!
K kevincsg Unregistered / Unconfirmed GUEST, unregistred user! 2001-12-06 #8 大家能说说DispatchMessage是实际作用吗? 因为给我的感觉是已经处理了消息,为什么再DispatchMessage???
Y YB_unique Unregistered / Unconfirmed GUEST, unregistred user! 2001-12-06 #11 上面的函数一般使用中的顺序: 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;
上面的函数一般使用中的顺序: 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;
K kevincsg Unregistered / Unconfirmed GUEST, unregistred user! 2001-12-07 #12 YB_unique兄,你可能搞错了吧,PeekMessage or Getmessage只能处理postthreadmessage发的消息, 不信你去看看MSDN,我在程序里也试过,getmessage根本就不能拦截sendmessage等发的消息 继续请大家指点,DispatchMessage更深一部的作用? 希望大家一起探讨,一起研究
YB_unique兄,你可能搞错了吧,PeekMessage or Getmessage只能处理postthreadmessage发的消息, 不信你去看看MSDN,我在程序里也试过,getmessage根本就不能拦截sendmessage等发的消息 继续请大家指点,DispatchMessage更深一部的作用? 希望大家一起探讨,一起研究
Y YB_unique Unregistered / Unconfirmed GUEST, unregistred user! 2001-12-07 #13 SendMessage函数本就是不经过消息队列而直接发送给窗口的。Getmessage当然拦截不到!
K kevincsg Unregistered / Unconfirmed GUEST, unregistred user! 2001-12-07 #14 "SendMessage函数本就是不经过消息队列而直接发送给窗口的。Getmessage当然拦截不到!" 你说的这点虽然对,但你还是没有回答我的问题 继续请大家指点,DispatchMessage更深一部的作用? 希望大家一起探讨,一起研究
"SendMessage函数本就是不经过消息队列而直接发送给窗口的。Getmessage当然拦截不到!" 你说的这点虽然对,但你还是没有回答我的问题 继续请大家指点,DispatchMessage更深一部的作用? 希望大家一起探讨,一起研究
Y YB_unique Unregistered / Unconfirmed GUEST, unregistred user! 2001-12-07 #15 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()有更高的应急性。你想立刻干的事情,就应该调用它。
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()有更高的应急性。你想立刻干的事情,就应该调用它。
Y YB_unique Unregistered / Unconfirmed GUEST, unregistred user! 2001-12-07 #16 DispatchMessage将处理后的消息发回Windows,由Windows自己处理, 它所完成的工作就是把当前消息分发到相关的窗口过程。然后窗口过程根据消息的类型对不同的消息进行相关处理。 难道还有问题???
DispatchMessage将处理后的消息发回Windows,由Windows自己处理, 它所完成的工作就是把当前消息分发到相关的窗口过程。然后窗口过程根据消息的类型对不同的消息进行相关处理。 难道还有问题???