windows - resource.h 文件中的 IDC_STATIC 是什么意思?

标签 windows winapi

我有一个由 VS 2012 生成的简单 Win32 项目。在 resource.h 文件中,我看到了这个:

#ifndef IDC_STATIC
#define IDC_STATIC              -1
#endif

我发现它在 resource.rc 文件中的几个地方被引用。但我不明白这是什么意思。我也没有在网上找到有关它的引用资料。有什么想法吗?

最佳答案

通过调用 CreateWindowEx 创建子控件时,您必须分配一个控件 ID(通过重载的 hMenu 参数)。控件 ID 稍后可用于引用控件,而无需存储动态创建的 HWND(例如,调用 GetDlgItemGetDlgItemInt 时)。

有些控件很少需要在代码中标识。一个突出的例子是 Static Control 1,如果在资源脚本中定义,通常不需要在代码中引用。您(或对话框管理器)在创建控件时仍然需要传递一个控件 ID,即使您以后不使用它也是如此。对于这些控件,您可以传递 IDC_STATIC 控件 ID,该 ID 在向导生成的 Resource.h 文件2.


1 其他示例包括 Icon Control (具有 SS_ICON 样式的静态控件),Line Control (具有 SS_ETCHEDHORZSS_SUNKEN 样式的静态控件),或 GroupBox Control .

2 这不是 Windows API3 的约定。这完全是由用户代码做出的决定。您可以使用另一个 ID 值,或者如果您愿意,根本不定义 IDC_STATIC,并在 LTEXT control statement 中使用整数文字改为:LTEXT "Filename", -1, 10, 10, 100, 100

3 授予,SDK header winres.h 确实将预处理器符号 IDC_STATIC 定义为(-1),所以如果您确实在代码中定义了它,请确保分配相同的值以避免混淆。

关于windows - resource.h 文件中的 IDC_STATIC 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37913963/

相关文章:

c - 使用 Turbo-C 的 C 语言中的 Windows.h

c++ - 捕获隐藏桌面的屏幕截图

dll - 我如何知道 dllmain 何时完成?

windows - 用于 Windows GUI 的 Perl

java - 在 Windows cmd 中使用 JAR 文件别名

mysql - 通过批处理文件运行 MySQL - 流氓角色

node.js - 跨平台 "rm"命令

c++ - 当 "required"运行时库不存在时显示(自定义)错误?

c++ - 如果应用程序崩溃(例如段错误或未处理的异常),由于某些 Win10 更新它现在似乎静静地死去

windows - 无法准备上下文 : unable to evaluate symlinks in context path: EvalSymlinks: too many links error when installing libacvp on windows