【发布时间】:2021-01-14 05:19:03
【问题描述】:
我有一个 VS 2012 生成的简单 Win32 项目。在resource.h 文件中,我看到了这个:
#ifndef IDC_STATIC
#define IDC_STATIC -1
#endif
我发现它在 resource.rc 文件的几个地方被引用。但我无法理解这意味着什么。我也没有在网上找到有关它的参考资料。有什么想法吗?
【问题讨论】:
-
它与 STATIC TEXT 控件有关(常见控制的一部分。您可以找到更多详细信息here,然后点击该页面上的链接到 CreateWindow/CreateWindowEx 获取更多详细信息。
-
当您不需要为控件分配特定 ID 时使用它,因为您不想以编程方式引用它;大多数情况下,一个永远不会改变且用户不会与之交互的静态标签。
-
没有静态文本控件。有一个可以显示文本或图像的 STATIC 控件。正如乔纳森所说,当你不需要在运行时与控件交互,不需要接收通知时,ID 并不重要。因此,约定将 -1 分配给不需要运行时交互的任何控件。
-
在 WinRes.h 中声明。一个非常不起眼的 SDK 头文件,几乎没有人想到 #include 。因此,粗略地说,为了减少支持调用的数量,他们让资源编辑器在尚未定义的情况下生成它。
-
@HansPassant:没有人包含 winres.h,因为它严格来说不是 Windows SDK 的一部分。第一行内容为:"// 这是 Microsoft Foundation Classes C++ 库的一部分。" 它作为 Windows SDK 的一部分提供,以减少支持调用的数量。既不包括它也不定义一个名为
IDC_STATIC的预处理器符号是强制性的(而后者至少是有用的)。