我有一个由VS 2012生成的简单Win32项目。在resource.h
文件中,我看到了这个:
#ifndef IDC_STATIC
#define IDC_STATIC -1
#endif
我发现它已在resource.rc
文件中的几个地方引用。但我无法理解这意味着什么。我也没有在网上找到它的参考。有什么想法吗?
答案 0 :(得分:2)
通过调用CreateWindowEx创建子控件时,必须分配一个控件ID(通过重载的 hMenu 参数)。稍后可以使用控件ID来引用控件,而无需存储动态创建的HWND
(例如,在调用GetDlgItem或GetDlgItemInt时)。
很少需要在代码中识别某些控件。一个突出的例子是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
,所以如果你这样做在代码中定义它,确保分配相同的值以避免混淆。