书籍:《windows程序设计(第五版)》的开始
环境:visual studio 2022
内容:HELLOWIN程序
说明:以下内容大部分来自腾讯元宝。
IDI_APPLICATION 和 IDC_ARROW 是 Windows 系统预定义的资源标识符,它们并不以文件形式直接存放在你的工程目录中,而是嵌入在 Windows 系统的动态链接库(DLL)中。以下是详细说明:
1. 资源的存储位置
-  
系统 DLL 文件:
这些标识符对应的资源(图标、光标)存储在 Windows 系统的核心 DLL 文件中,例如:- **
user32.dll**:包含基础窗口和控件资源(如IDI_APPLICATION、IDC_ARROW)。 - **
imageres.dll**:存储图标资源(如IDI_APPLICATION)。 - **
shell32.dll**:包含 shell 相关资源(如IDC_ARROW光标)。 
 - **
 -  
资源标识符的映射:
每个标识符(如IDI_APPLICATION)对应 DLL 中的一个资源条目,由微软在系统安装时预先定义。 
2. 在代码中的引用方式
在代码中,你通过 LoadIcon、LoadCursor 等函数直接加载这些资源,无需指定文件路径。例如:
HICON hIcon = LoadIcon(NULL, IDI_APPLICATION);       // 从系统加载应用程序图标
HCURSOR hCursor = LoadCursor(NULL, IDC_ARROW);      // 从系统加载箭头光标 
- 参数 
NULL的含义:
表示从当前进程的模块(或系统 DLL)中加载资源。由于这些资源是系统内置的,NULL会自动指向正确的 DLL。 
3. 资源的可视化验证
你可以通过工具(如 Resource Hacker 或 DLL Explorer)直接查看系统 DLL 中的资源:
- 打开 
user32.dll或imageres.dll。 - 搜索 
IDI_APPLICATION(图标)或IDC_ARROW(光标)。 - 查看资源的元数据(如尺寸、颜色、数据流)。
 
4. 常见误区与注意事项
-  
误区1:认为需要将资源文件(如
.ico、.cur)添加到工程目录。
纠正:IDI_APPLICATION和IDC_ARROW是系统资源,无需手动添加文件。 -  
误区2:尝试通过文件路径加载这些标识符。
纠正:只能通过LoadIcon、LoadCursor等函数直接加载,无法通过文件路径引用。 -  
错误处理:
如果加载失败(如返回NULL),可能是以下原因:- 系统 DLL 丢失或损坏(罕见)。
 - 标识符拼写错误(如 
IDI_APPLICATION写成IDI_APP)。 - 编译器未正确链接 
winmm.lib或user32.lib(需确保已添加依赖库)。 
 
5. 扩展:自定义资源与系统资源的区别
| 类型 | 存储位置 | 使用场景 | 示例标识符 | 
|---|---|---|---|
| 系统资源 | 系统 DLL(如 user32.dll) | 标准界面元素(图标、光标、声音) | IDI_APPLICATION | 
| 自定义资源 | 工程目录(.rc 文件) | 程序专属资源(图片、音频、配置) | IDR_MYICON(自定义图标 ID) | 
总结
IDI_APPLICATION 和 IDC_ARROW 是 Windows 系统内置资源,直接通过 API 函数加载,无需手动管理路径。它们的存储位置在系统 DLL 中,是 Windows 桌面应用程序开发的基石。理解这一点有助于避免资源加载错误,并提升代码的兼容性和效率。