【问题标题】:How to add a message handler to a wndproc如何将消息处理程序添加到 wndproc
【发布时间】:2012-11-06 14:37:07
【问题描述】:

我有一个启动线程的 acrobat 插件。从那个线程我需要回到 UI 线程。我确实有 HWND,但如果我执行PostMessage,我如何让主机应用程序的 WNDPROC 将调用库排序到我拥有的处理程序中。我想我的问题是,无论如何在概念上做类似的事情

RegisterWndMsgHandler( HWND, MSG, CALLBACK );

【问题讨论】:

  • 您无法让主机窗口处理它没有被写入处理的消息。在“启动线程”的代码中创建自己的窗口。

标签: winapi


【解决方案1】:

您可以通过SetWindowLongPtr(GWL_WNDPROC) 用您自己的消息处理程序替换HWND 的子类。请务必调用GetWindowLongPtr(GWL_WNDPROC) 来检索原始处理程序,然后让您的处理程序将任何未处理的消息传递给CallWindowProc(),以便原始处理程序可以处理它们。

【讨论】:

  • 是的,这是我自己想出来的,但这就像一个魅力,这真的很酷,我应该也可以用它来为 Outlook 插件进行后台处理
  • 我要补充一点,您不需要调用 GetWindowLongPtr,SetWindowLongPtr 返回偏移处的值(在本例中为 GWL_WNDPROC),因此您只需存储来自 SetWindowLongPtr 的返回值以用于CallWindowProc
猜你喜欢
  • 2010-10-12
  • 1970-01-01
  • 2014-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多