在WINAPI中,正确/必要的是什么?

SetWindowLongPtr(HelpBox, GWLP_USERDATA, static_cast<LONG_PTR>(SetWindowLongPtr(HelpBox, GWLP_WNDPROC, (LONG_PTR)(Subclass))));

要么
SetWindowLongPtr(HelpBox, GWLP_WNDPROC, (LONG_PTR)(Subclass));

然后在WM_DESTROY中,我都喜欢:
SetWindowLong(HelpBox, GWLP_WNDPROC, (LONG) Original);

为什么我要在第二个上使用第一个?我注意到它两次都有GWLP_USERDATA和setwindowlongptr。为什么?我在MSDN上看到了两个示例,我不知道何时在第二个上使用第一个。

有任何想法吗?

最佳答案

改用 SetWindowSubclass ;它处理了将数据与窗口关联的负担。无论如何。第一个将旧的窗口处理程序地址存储在与该窗口相关联的用户数据存储中,除非窗口类是您自己定义的类,否则您将无法执行该操作。也就是说,在窗口中确实存在此类存储的位置,您可以确保该存储不用于其他任何用途。

09-30 12:01