子类控制

时间:2013-03-08 23:31:36

标签: c++ winapi subclassing

在WINAPI中,这是正确/必要的吗?

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

OR

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

然后在WM_DESTROY中,我同样喜欢:

SetWindowLong(HelpBox, GWLP_WNDPROC, (LONG) Original);

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

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

使用 SetWindowSubclass ;它处理与窗口关联数据的负担。无论如何。第一个将旧窗口proc地址存储在与窗口关联的用户数据存储中,除非窗口类是您自己定义的窗口类,否则不能这样做。即窗口存在此类存储的地方,保证该存储不用于其他任何内容。