IDC_STATIC在resource.h文件中是什么意思?

Dav*_* S. 5 windows winapi

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

#ifndef IDC_STATIC
#define IDC_STATIC              -1
#endif
Run Code Online (Sandbox Code Playgroud)

我发现在resource.rc文件的几个地方都引用了它。但我不明白这意味着什么。我也没有在网上找到关于它的参考。任何的想法?

IIn*_*ble 4

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

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


1 其他示例包括图标控件(具有 样式的静态控件SS_ICON)、线条控件(具有SS_ETCHEDHORZSS_SUNKEN样式的静态控件)或GroupBox 控件

2 这不是 Windows API 的约定3。这完全是由用户代码做出的决定。您可以使用另一个 ID 值,或者IDC_STATIC如果需要的话根本不定义,而是在LTEXT 控制语句中使用整数文字:LTEXT "Filename", -1, 10, 10, 100, 100

3 当然,SDK 标头 winres.h 确实将预处理器符号定义IDC_STATIC(-1),因此,如果您在代码中定义了它,请确保分配相同的值以避免任何混淆。