我有一个由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_ETCHEDHORZ
和SS_SUNKEN
样式的静态控件)或GroupBox控件 。
2 这不是Windows API 3的约定。 这严格是由用户代码决定的。 您可以使用其他ID值,或者根本不需要定义IDC_STATIC
,而是在LTEXT控制语句中使用整数文字: LTEXT "Filename", -1, 10, 10, 100, 100
3 当然,SDK头 winres.h会将预处理器符号IDC_STATIC
定义为(-1)
,所以如果您在代码中定义它,请确保分配相同的值以避免混淆。