EnumChildWindows 本身已经是递归的了

2023-12-14 11:06:34

我经常看到一些朋友会编写类似于下面的代码。

>> 请移步至 www.topomel.com 以查看图片 <<

上面的这段代码的本意是:通过对窗口树根结点进行操作,然后对每个子窗口进行操作,对窗口树中的所有窗口执行操作。反过来,对子项的操作又以递归方式执行,因此我们最终可以看到树中的每个窗口。

除了如果你真的在一个模糊有趣的窗口树上运行这个函数,你会发现项目被计算了多次。

原因是 EnumChildWindows 函数已经执行递归。

以下是 MSDN 对 EnumChildWindows 的描述:
如果子窗口创建了自己的子窗口,则 EnumChildWindows 也会枚举这些窗口。

如果你添加自己的递归,那么你最终会计算两次孙窗口,四次曾孙窗口,依此类推。递归已由 EnumChildWindows 完成,我们只是使用它即可,不需要再使用递归封装一次了。

>> 请移步至 www.topomel.com 以查看图片 <<

总结

在非必要的情况,还是尽量少使用递归这种形式,虽然它看起来确实很美。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《EnumChildWindows already enumerates recursively》

文章来源:https://blog.csdn.net/mmxida/article/details/134986441
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。