![]() |
1
2
我认为称之为“泄密”有点夸张。如果为true,则在调用removeWindowsSubClass时不会还原用户对象,但在再次调用setWindowsSubClass时也不会分配另一个对象。您可以重复地设置和移除钩子,并且在流程的生命周期中,相同的用户对象似乎会被反复使用。 我做了更多的测试,扩展了您最简单的案例场景。仅作为背景参考,具有两个命令按钮且不使用窗口挂钩的表单的每个实例 六 用户对象。调用setWindowsSubClass确实会消耗更多的用户对象 每个窗口类 . 也就是说,我可以加载该表单的多个实例,并为表单本身以及包含的两个命令按钮挂接消息流,并且总共使用两个用户对象。正如你所观察到的,这些物质在整个过程中不会被回收利用。 内部设计可以更干净吗?可能。再说一遍,可能不会。我认为这根本没有什么值得关注的。更值得关注的原因是设计的应用程序 可以 关心。在这种情况下,可以对整个UI设计进行基本的重新考虑。我简直无法想象在一个进程中,什么时候您将在一个进程中子类化如此多的窗口类,以至于每个类的这个额外对象可能会很重要。 |
![]() |
2
1
这是在vb6中进行子类化的一种不寻常的方法。你可能会有更多的运气 SetWindowLong(GWL_WNDPROC) -见 this VB6 code 来自卡尔·彼得森。 有趣的是,看起来卡尔是 experimenting right now 使用与您使用的相同的comctl32函数。编辑:是的,他是 posted an article . 编辑:哦,还有 an answer to this question :) |