【问题标题】:How do win32 apps using sigc and glib implements Message loopwin32应用如何使用sigc和glib实现消息循环
【发布时间】:2011-07-27 08:25:44
【问题描述】:

如果 Win32 应用程序的 UI 使用 sigc 和 glibmm 设计, 它如何实现它的消息循环? 它是否仍然使用 Win32 API,例如 GetMessage、DispatchMessage、TranslateMessage 等? 或者他们使用其他功能来完成这个? 而且默认的WinProc还在吗?

【问题讨论】:

  • “如”GetMessage 是正确的。 PeekMessage 是一个可行的选择。

标签: winapi loops gtk message


【解决方案1】:

sigc+glibmm 是 GTK C 框架回调/主循环之上的 C++ 级别,它位于本机回调/主循环(MacOSX 上的 NSRunLoop 和 Windows 上的 GetMessage)之上。

GetMessage 必须由 Windows 上的每个 GUI 应用程序调用,以获取绝对基础知识,如窗口句柄、按键和鼠标移动。

不需要 TranslateMessage,因为加速键由 GTK 自己的实现处理。

SendMessage 很少使用,大多数需要 SendMessage 的调用都是对客户端控件(如按钮或文本字段小部件)的调用。在 GTK 中,它们被实现为 GtkButton 和 GtkEntry,GTK 可以直接使用 C 实现,而无需经过 windows 消息调度。

【讨论】:

    【解决方案2】:

    所有 Windows GUI 应用程序都必须运行基于 GetMessageTranslateMessageDispatchMessage 的消息泵。框架通常会保护您免受实现细节的影响,但框架中的某处将是一个消息泵。

    窗口过程也是如此。尽管您可能永远不必编写一个或与一个交互,但框架必须为顶级窗口提供窗口过程,并且可能为子窗口提供窗口过程,具体取决于框架的实现方式。

    【讨论】:

      猜你喜欢
      • 2012-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      • 2017-06-11
      相关资源
      最近更新 更多