当我推进我的第一个winapi UI时,我发现自己在WinMain文件中创建了大量令人不舒服的HWND变量:
HWND foo;
HWND bar;
HWND baz;
HWND etc;
int WINAPI WinMain(...) {}
当然,这些变量用于文件其余部分的函数 - 例如消息循环 - 因此它们必须是可访问的。
对于我相对较小的用户界面,我会有30个HWND堆积在一起,因此它们处于可见范围内。这让我非常怀疑我做错了。
这是应该发生的事情,还是有更实际的方法来组织这个?
答案 0 :(得分:1)
根据您的计划,您有一些解决方案。
std::vector
。答案 1 :(得分:0)
您的主程序中只需要一个HWND,那就是主窗口。
API不需要单个主窗口,但这是最常见的。即使从用户的角度来看,应用程序提供了几个明显独立的窗口,但在程序中有一个主窗口是个好主意(它可以是不可见的,但提供分组)。
其他窗口则是主窗口的子窗口(在其中)或主窗口“拥有”的窗口。一般来说。特别是对于第一个Windows程序。 :-)所以你不需要为这些窗口单独的变量。每当一个窗口应该对某个东西作出反应时,这就是对窗口的一个消息,这意味着用一个相关窗口句柄作为参数调用你的一个函数。
每个子窗口都可以有一个唯一的整数ID,这是跟踪它们的一种方法。
但是当你开始时,你会希望将状态与每个窗口关联起来,最简单的方法是使用Windows“子类化”API将指针与每个窗口相关联。然后,您可以将窗口过程调用路由到关联的C ++对象上的方法。可以将不同的消息进一步路由到不同的消息处理方法,每个消息处理方法都可以访问窗口的状态(它只是这个C ++对象)。