1
在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上看到了两个例子,我不知道什么时候使用第一个。
任何想法?
呃,抱歉编辑。我将自定义用户数据存储的非负索引与“GWLP_USERDATA”混合在一起,这是一个单独的项目存储并且始终存在。但同样的警告适用。需要完全控制才能使用它。 – 2013-03-08 23:50:19
你能告诉我什么是SetWindowSubclass的最后两个参数吗?我为什么需要它们?我正在写一个课程来制作窗口,如果需要的话,我不想跟踪所有的ID。 http://pastebin.com/ePbbM57x < - 就像那样。我是否必须跟踪每个子类的全局ID?如果两个ID相同会发生什么? – Brandon 2013-03-08 23:54:51
@CantChooseUsernames:该id用于删除子类(通常您会在收到'WM_DESTROY'时执行此操作)。由于删除函数将窗口句柄作为参数,以及子类的窗口过程地址,因此您可以选择一个常量标识,例如0或1 :-)。唯一的例外是我可以想到的是,当代码是这样的,使用相同的子类窗口过程对相同的窗口进行两次或更多子类化时,可以发生,然后该ID至少原则上允许适当的顺序无关清理 – 2013-03-09 00:12:43