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

时间:2011-06-06 13:48:51

标签: c++ windows

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

为子窗口生成唯一ID的最佳方法是什么?或者我只是#define他们到从某个数字开始的某个整数迭代?它是否会与窗口冲突,例如,我在应用程序中创建另一个独立窗口?

2 个答案:

答案 0 :(得分:1)

对于它的价值,您可以使用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不会在Windows之间发生冲突,因为指示数字的消息将被发送到不同的“父母”。它只是(父,id)对,需要是唯一的。

答案 1 :(得分:0)

我通过实现具有预定ID范围的简单IDManager类和用于重用free'dID的队列来解决了这个问题。迭代所有子窗口对于每个控件创建来说都是相当重要的事情。