IDC_STATIC在resource.h文件中意味着什么?

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

 #ifndef IDC_STATIC #define IDC_STATIC -1 #endif 

我发现它在resource.rc文件的几个地方被引用。 但我不明白这是什么意思。 我也没有在网上find它的参考。 任何想法?

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

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


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) ,所以如果您在代码中定义它,请确保分配相同的值以避免混淆。