0

当我推进我的第一个 winapi UI 时,我发现自己在我的 WinMain 文件中创建了一大堆令人不舒服的 HWND 变量:

HWND foo;
HWND bar;
HWND baz;
HWND etc;

int WINAPI WinMain(...) {}

当然,这些变量在文件其余部分的函数中使用 - 例如消息循环 - 所以它们必须是可访问的。

对于我相对较小的 UI,我会堆积 30 个 HWND,以便它们处于可见范围内。这让我非常怀疑我做错了。

这是应该发生的事情,还是有更实际的组织方式?

4

2 回答 2

1

您有一些解决方案,具体取决于您的程序。

  1. 您可以将所有这些句柄放在一个或多个容器中,例如std::vector.
  2. 您可以像克里斯建议的那样映射它们。
  3. 如果您的程序变得很大,您可能希望将它们组织成逻辑单元。例如,如果其中 15 个窗口用于一半逻辑,另外 15 个用于另一半(比如选项卡内的控件),那么您可能希望以某种方式对这些控件进行分组(文件、类、任何最符合逻辑的)。
于 2012-11-06T02:09:24.507 回答
0

您的主程序中只需要一个 HWND,这是一个主窗口。

API 不需要单个主窗口,但这是最常见的。即使从用户的角度来看,应用程序提供了几个明显独立的窗口,在程序中拥有一个主窗口也是一个好主意(它可以是不可见的,但提供分组)。

其他窗口要么是主窗口的子窗口(在其中),要么是主窗口“拥有”的窗口。一般来说。特别是对于第一个 Windows 程序。:-) 所以这些窗口不需要单独的变量。每当一个窗口应该对某事做出反应时,这就是给窗口的一条消息,这意味着以相关窗口句柄作为参数调用您的一个函数。

每个子窗口都可以有一个唯一的整数 ID,这是跟踪它们的一种方法。

但是随着您的进步,您将希望将状态与每个窗口相关联,最简单的方法是使用 Windows“子类化”API 将指针与每个窗口相关联。然后,您可以将窗口过程调用路由到关联 C++ 对象上的方法。不同的消息可以进一步路由到不同的消息处理方法,每个方法都可以访问窗口的状态(它只是这个 C++ 对象)。

于 2012-11-06T02:58:56.437 回答