gpt4 book ai didi

c - SetWindowLongPtr() 如何传递消息?

转载 作者:太空宇宙 更新时间:2023-11-04 05:28:36 29 4
gpt4 key购买 nike

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

  1. 您可以使用以下函数获取当前消息并将其发送到自定义协议(protocol):LONG_PTR Some_Ptr = SetWindowLongPtr(Some_Hwnd, GWLP_WNDPROC, (LONG_PTR)Custom_Proc);

  2. 创建自定义协议(protocol),示例如下:

    static LRESULT CALLBACK Custom_Proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    switch (msg)
    {
    case WM_COMMAND:
    MessageBox(hwnd,"This is a window","OKAY",NULL);
    break;
    default:
    return CallWindowProc((WNDPROC)Some_Ptr, hwnd, msg, wParam, lParam);
    break;
    }
    return CallWindowProc((WNDPROC)Some_Ptr, hwnd, msg, wParam, lParam);
    }

我的问题如下:

  1. 我是不是漏掉了什么?这是正确的吗?
  2. 在哪里调用 SetWindowLongPtr()?如果您需要特定情况,请将按钮句柄想象为在 WM_CREATE 中创建的 Some_Hwnd。但我宁愿它对其他情况开放。

最佳答案

这称为“对窗口进行子类化”。这是一种标准的 Windows 编程技术,允许修改您无法修改其代码的窗口的行为。就像您案例中的内置 Button 类。

有几个细节,比如对窗口的特定实例进行子类化与全局子类化。以及 super 分类,一种确保窗口在创建之前得到定制的技术。 SDK documentation 中对此进行了详细描述以及任何有关 native winapi 编程的书籍。就像 Petzold 的“Windows 编程”一样,如果您想破解 winapi 代码,则需要阅读。

关于c - SetWindowLongPtr() 如何传递消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14371616/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com