概述
看看有啥问题
Windows的窗口子类化(Subclassing)是一个比你想象的复杂的一种技术。
我们先看看下面的代码有啥问题没有:
我想大部分人应该可以看着里面的问题来。
如果在”…do stuff…”阶段,其他人又一次进行了窗口子类化,将会发生什么呢?当我们恢复窗口过程的时候,我们会重复执行两次解除子类化(Unsubclassing)操作。
第一次是我们新设置的窗口过程,第二次是其他人设置的版本。如果第二个子类化中分配了内存(这是很常见的),则这个内存将会发生泄露,另外原本希望进行的窗口子类化也不会像预期那样工作。
请不要觉得窗口的子类化的添加或者移除像栈那样工作。如果你希望解除窗口子类化的时候发现你设置的窗口过程不是在设置链的顶部,则你将不能安全的执行这个操作。
你不得不需要等待一个合适的时间点来完成这项操作,在这个时间点之前,你的窗口过程会一直挂接在调用链上,并且你还需要不断地将收到的消息转发给之前的窗口过程。
还是要按照规则来
这看起来是一个比较复杂的事情,所以Windows外壳(Shell)开发团队实现了一些帮助函数来帮助你完成这些繁杂的事物。SetWindowSubclass这个API会帮你干所有这些脏活:安装一个子类化的窗口过程,保存安装之前的窗口过程指针,并将引用数据传递到你提供的子类化窗口过程。
另外,你还可以使用DefSubclassPr
最后
以上就是有魅力金针菇为你收集整理的关于窗口子类化需要注意的地方看看有啥问题还是要按照规则来的全部内容,希望文章能够帮你解决关于窗口子类化需要注意的地方看看有啥问题还是要按照规则来所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复