首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SetWindowLongPtr()是如何传递消息的?

SetWindowLongPtr()是如何传递消息的?
EN

Stack Overflow用户
提问于 2013-01-17 03:09:13
回答 2查看 1.9K关注 0票数 1

我一直在努力学习如何使用SetWindowLongPtr(),并将其理解为:

  1. 您可以使用以下函数获取当前消息并将其发送到自定义协议:LONG_PTR Some_Ptr = SetWindowLongPtr(Some_Hwnd, GWLP_WNDPROC, (LONG_PTR)Custom_Proc);
  2. 创建自定义协议,示例如下: 静态LRESULT回调Custom_Proc( hwnd,UINT,WPARAM wParam,LPARAM lParam) {lParam (msg) { case WM_COMMAND: MessageBox(hwnd,“这是一个窗口”,“is”,NULL);中断;默认:返回CallWindowProc((WNDPROC)Some_Ptr,hwnd,msg,wParam,lParam);}返回CallWindowProc((WNDPROC)Some_Ptr,hwnd,msg,wParam,lParam);}

我的问题如下:

  1. 我是不是漏掉了什么?这是正确的吗?
  2. 你在哪里叫SetWindowLongPtr()?如果您需要一个特定的情况,可以设想在Some_Hwnd中创建一个按钮句柄。但我宁愿把它留给其他情况。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-17 20:33:14

这就是所谓的“细分窗口”。这是一种标准的Windows编程技术,允许修改无法修改其代码的窗口的行为。就像你的情况下内置的Button类。

有几个细节,比如一个窗口的特定实例与全局子类的子类。和超类,一种确保窗口在创建之前被定制的技术。这在SDK文档和任何关于本机winapi编程的书中都有很好的描述。就像Petzold的“编程Windows”一样,如果您想破解winapi代码,就需要阅读。

票数 5
EN

Stack Overflow用户

发布于 2013-01-17 18:58:45

我觉得你很困惑。根据文档,GWLP_WNDPROC更改指定窗口的窗口过程,因此发送到该窗口的任何未来消息都将转到新过程。在我所知道的任何意义上,它都不会“抓住当前的信息”。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14371616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档