IDI_APPLICATION 与 IDC_ARROW资源存放在工程的哪个路径?

书籍:《windows程序设计(第五版)》的开始

环境:visual studio 2022

内容:HELLOWIN程序

说明:以下内容大部分来自腾讯元宝。

IDI_APPLICATIONIDC_ARROW 是 ​Windows 系统预定义的资源标识符 ,它们并不以文件形式直接存放在你的工程目录中,而是嵌入在 Windows 系统的动态链接库(DLL)中。以下是详细说明:


1. 资源的存储位置

  • 系统 DLL 文件
    这些标识符对应的资源(图标、光标)存储在 Windows 系统的核心 DLL 文件中,例如:

    • **user32.dll**:包含基础窗口和控件资源(如 IDI_APPLICATIONIDC_ARROW)。
    • **imageres.dll**:存储图标资源(如 IDI_APPLICATION)。
    • **shell32.dll**:包含 shell 相关资源(如 IDC_ARROW 光标)。
  • 资源标识符的映射

    每个标识符(如 IDI_APPLICATION)对应 DLL 中的一个资源条目,由微软在系统安装时预先定义。


2. 在代码中的引用方式

在代码中,你通过 LoadIconLoadCursor 等函数直接加载这些资源,无需指定文件路径。例如:

cpp 复制代码
HICON hIcon = LoadIcon(NULL, IDI_APPLICATION);       // 从系统加载应用程序图标
HCURSOR hCursor = LoadCursor(NULL, IDC_ARROW);      // 从系统加载箭头光标
  • 参数 NULL 的含义
    表示从当前进程的模块(或系统 DLL)中加载资源。由于这些资源是系统内置的,NULL 会自动指向正确的 DLL。

3. 资源的可视化验证

你可以通过工具(如 ​Resource Hacker 或 ​DLL Explorer)直接查看系统 DLL 中的资源:

  1. 打开 user32.dllimageres.dll
  2. 搜索 IDI_APPLICATION(图标)或 IDC_ARROW(光标)。
  3. 查看资源的元数据(如尺寸、颜色、数据流)。

4. 常见误区与注意事项

  • 误区1 :认为需要将资源文件(如 .ico.cur)添加到工程目录。

    纠正IDI_APPLICATIONIDC_ARROW 是系统资源,无需手动添加文件。

  • 误区2 :尝试通过文件路径加载这些标识符。

    纠正 :只能通过 LoadIconLoadCursor 等函数直接加载,无法通过文件路径引用。

  • 错误处理

    如果加载失败(如返回 NULL),可能是以下原因:

    • 系统 DLL 丢失或损坏(罕见)。
    • 标识符拼写错误(如 IDI_APPLICATION 写成 IDI_APP)。
    • 编译器未正确链接 winmm.libuser32.lib(需确保已添加依赖库)。

5. 扩展:自定义资源与系统资源的区别

类型 存储位置 使用场景 示例标识符
系统资源 系统 DLL(如 user32.dll 标准界面元素(图标、光标、声音) IDI_APPLICATION
自定义资源 工程目录(.rc 文件) 程序专属资源(图片、音频、配置) IDR_MYICON(自定义图标 ID)

总结

IDI_APPLICATIONIDC_ARROW 是 Windows 系统内置资源,直接通过 API 函数加载,无需手动管理路径。它们的存储位置在系统 DLL 中,是 Windows 桌面应用程序开发的基石。理解这一点有助于避免资源加载错误,并提升代码的兼容性和效率。

相关推荐
charlie11451419114 小时前
通用GUI编程技术——图形渲染实战(二十九)——Direct2D架构与资源体系:GPU加速2D渲染入门
开发语言·c++·学习·架构·图形渲染·win32
charlie1145141912 天前
通用GUI编程技术——图形渲染实战(二十八)——图像格式与编解码:PNG/JPEG全掌握
开发语言·c++·windows·学习·图形渲染·win32
charlie1145141913 天前
通用GUI编程技术——图形渲染实战(二十七)——坐标变换与矩阵:三级坐标系
c++·学习·c·图形渲染·win32
charlie1145141913 天前
通用GUI编程技术——图形渲染实战(二十六)——GDI+与GDI架构差异:抗锯齿与渐变
c++·windows·学习·图形渲染·win32
charlie1145141914 天前
通用GUI编程技术——图形渲染实战(二十五)——Alpha混合与透明效果:分层窗口实战
c++·windows·学习·图形渲染·win32
charlie1145141914 天前
通用GUI编程技术——图形渲染实战(二十四)——GDI Region与裁切:不规则窗口与可视化控制
c++·windows·学习·c·图形渲染·win32
charlie1145141918 天前
通用GUI编程技术——Win32 原生编程实战(二十二)——GDI 位图操作:BitBlt、StretchBlt 与图像处理
c++·windows·学习·c·win32
Peter(阿斯拉)14 天前
[WTL/Win32]_[初级]_[如何在工作线程计算文本的宽高]
win32·gdi·wtl·gdiplus·内存hdc
charlie11451419116 天前
通用GUI编程技术——Win32 原生编程实战(十八)——GDI 设备上下文(HDC)完全指南
开发语言·c++·ide·学习·visual studio·win32
charlie11451419116 天前
通用GUI编程技术——Win32 原生编程实战(十六)——Visual Studio 资源编辑器使用指南
开发语言·c++·ide·学习·gui·visual studio·win32