[英]Where should I keep track of my window handles when writing a windows desktop application?
我正在尝试用c ++编写我的第一个Windows桌面应用程序,但是对此我还很陌生,我不知道该如何跟踪子窗口的窗口句柄。
我在丢失窗口句柄时遇到了一些问题,例如:
从多个跟踪栏接受WM_HSCROLL消息时,lParam在消息中标识了特定的跟踪栏,其中包含跟踪栏窗口的句柄...但是如果我不存储窗口句柄,则不知道哪个跟踪栏消息来自!
我应该将它们存储在全局变量中吗? 这似乎不是很安全。
我应该创建一个结构或类来包装父窗口并存储重要的变量,例如窗口句柄吗? 如果是这样,我将如何处理?
应在对特定窗口有意义的位置跟踪窗口句柄。 例如,如果您的程序只能创建一个主窗口类的实例,那么可能根本不需要存储该HWND(主窗口的对象存储状态是,但HWND本身不需要)。
如果该主窗口创建了子窗口(例如提到的跟踪栏),则跟踪栏HWND将作为该主要对象状态的一部分存储。
确实,这与任何其他程序体系结构问题都没有什么不同,您需要设计程序,以便将所有需要的数据公开在需要的地方,但是尝试将公开范围限制为仅在实际需要的地方。
让我们从头开始。
函数返回结果是有原因的。 如果您忽略API函数的结果,那么您现在正在做错什么! API函数是什么都没有关系,如果返回结果,则不应丢弃它。 它可以是进一步使用所需的对象,也可以是错误代码,或者同样有用的东西。 当然,窗口句柄是非常有用的对象,不应丢弃。
现在,一旦您确定了手柄并决定将其保持在周围(应按要求进行),问题便是如何处理 。 事实是,是否将其包装在班级中是次要的决定。 存储窗口句柄的最好方法是将它们放在某种动态容器中。 例如, std::vector
。
最后但并非最不重要的一个问题是如何从消息处理功能访问此句柄容器。 最简单的方法之一(尽管不是最优雅的方法)是使此向量成为全局变量。 比任何消息处理程序路由都可以轻松访问它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.