窗口编程(C++):如何检查子窗口ID是否被占用?以及如何生成子窗口的唯一ID



如何检查指定的整数是否已被占用?我为自己构建了一个模板,专门用于创建窗口控件。我需要一些方法来跟踪子ID。例如,模板的用户不小心放入了一个具有相同ID的create参数,然后它应该返回错误。那么,我该如何检查孩子ID是否重复?

为子窗口生成唯一ID的最佳方式是什么?还是我只是把它们定义为从某个数字开始的整数的某个迭代?例如,如果我在应用程序中创建另一个独立的窗口,它会与窗口冲突吗?

值得一提的是,您可以使用EnumChildWindows():枚举子窗口句柄

http://msdn.microsoft.com/en-us/library/ms633494(v=VS.85).aspx

然后有一个函数从它的句柄GetDlgCtrlID():中获取子窗口的ID

http://msdn.microsoft.com/en-us/library/ms645478(v=vs.85).aspx

不过,只有当您从模板中实例化了一个窗口后,这才有用。如果你想在构建窗口之前检查模板,那么这将取决于模板格式。

您使用的ID在窗口之间不会发生冲突,因为指示数字的消息将发送给不同的"家长"。只有(parent,id)对需要是唯一的。

我通过实现一个简单的IDManager类来解决这个问题,该类具有预定的ID范围和一个用于重用空闲ID的队列。在每个控件创建过程中,迭代所有子窗口似乎是一件相当繁重的事情。

最新更新