IDC_STATIC在resource.h文件中的含义是什么?

时间:2016-06-20 02:41:01

标签: windows winapi

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

#ifndef IDC_STATIC
#define IDC_STATIC              -1
#endif

我发现它已在resource.rc文件中的几个地方引用。但我无法理解这意味着什么。我也没有在网上找到它的参考。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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

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

<小时/> 1 其他示例包括Icon Control(具有SS_ICON样式的静态控件),Line Control(具有{{1}的静态控件) }和SS_ETCHEDHORZ样式),或GroupBox Control

2 这不是Windows API 3 的约定。它严格地由用户代码决定。如果需要,您可以使用其他ID值,或者根本不定义SS_SUNKEN,而是使用LTEXT control statement中的整数文字:IDC_STATIC

3 当然,SDK标头 winres.h 确实将预处理器符号LTEXT "Filename", -1, 10, 10, 100, 100定义为IDC_STATIC,所以如果你这样做在代码中定义它,确保分配相同的值以避免混淆。