【问题标题】:Windows message vs EventsWindows 消息与事件
【发布时间】:2012-05-23 11:00:56
【问题描述】:

我是 MFC 和 Windows 消息传递概念的新手。 Windows消息和事件之间有什么区别或相似之处?比如当用户按下一个键或一个控件的关闭按钮时,它会是一个消息还是事件?

谢谢

【问题讨论】:

  • winapi是用C编程语言指定的。 C 没有任何事件的概念。所以winapi使用消息来实现类似的东西。然后经常被类库翻译成类似事件的东西。当您使用其消息映射宏时,MFC 中的方法调用。避免在没有先阅读有关 MFC 的书籍的情况下尝试 MFC,没有一本你不会走得太远。
  • “事件”一词在 Windows 中严重过载。请更具体地说明您所指的事件类型。如果没有上下文,人们通常指的是由CreateEvent 创建的“内核事件”,但也许您指的是其他东西。
  • .Net 中的相同概念(事件)

标签: windows winapi events message


【解决方案1】:

当用户按下一个键或执行任何其他形式的输入时,系统会将消息放入消息队列中。然后,您的应用程序必须在其消息循环中提取这些消息,并处理它们。

许多 UI 框架会为您处理这些消息并将它们转换为事件。请注意,您谈论的事件不是 Windows 定义的任何意义上的事件。事件的使用是指在您使用的任何编程语言/框架中定义的概念。 Windows events 用于线程同步。

顶级消息循环可能如下所示:

MSG msg;
while(GetMessage(&msg, NULL, 0, 0) > 0)
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}

DispatchMessage 的调用导致调用窗口过程。 GUI 框架通常实现该窗口过程并将消息转换为事件。

所以,执行摘要是:

  1. 输入事件导致消息。
  2. GUI 框架将消息转换为事件。
  3. 您实现事件处理程序来响应这些事件。

【讨论】:

  • 感谢回复,但是“GUI框架将消息转换为事件”是什么意思?我认为所有消息都将根据消息映射发送到它们自己的处理程序。那么这种转换适合什么地方呢?
  • 您能否通过指向某些参考的链接来解释您所说的事件一词的确切含义。这样我们就可以确定我们在谈论同一件事。
  • 以下 URL“消息处理和映射”很好地解释了这些问题:msdn.microsoft.com/de-de/library/6d1asasd(v=vs.80).aspx
  • 我来自 .Net (C#) 背景,因此我自然知道该概念中的事件。事件和事件处理程序,例如表单中的按钮或此“事件”关键字定义的其他自定义事件。
  • 问题是我在 MFC 中看到了类似 WM_CLOSE 对话框的 Windows 消息,然后您还可以为关闭按钮定义一个事件处理程序,所以这意味着当用户按下关闭按钮时Windows 消息和单独的事件?
猜你喜欢
  • 2018-02-09
  • 2010-12-25
  • 2011-03-13
  • 1970-01-01
  • 1970-01-01
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
  • 2014-12-29
相关资源
最近更新 更多