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

书籍:《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 等函数直接加载这些资源,无需指定文件路径。例如:

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.dll 或 imageres.dll。
  2. 搜索 IDI_APPLICATION(图标)或 IDC_ARROW(光标)。
  3. 查看资源的元数据(如尺寸、颜色、数据流)。

​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 桌面应用程序开发的基石。理解这一点有助于避免资源加载错误,并提升代码的兼容性和效率。

相关推荐
学逆向的14 天前
win32注入代码
开发语言·网络安全·api·win32
学逆向的17 天前
win32远程线程
网络安全·api·win32
学逆向的17 天前
远程线程注入
开发语言·jvm·网络安全·win32
学逆向的18 天前
win32文件系统
网络安全·api·win32
学逆向的23 天前
虚拟内存与物理内存
windows·网络安全·api·win32
学逆向的25 天前
win32消息类型
windows·网络安全·mfc·api·win32
charlie1145141915 个月前
通用GUI编程技术——图形渲染实战(四十五)——D3D12资源与堆管理:从上传到驻留
开发语言·3d·图形渲染·win32
『昊纸』℃5 个月前
C语言跨平台桌面UI突围!libui-ng实战对比Win32、GTK老牌方案
c语言·win32·桌面开发·跨平台ui·libui-ng
charlie1145141915 个月前
通用GUI编程技术——图形渲染实战(四十三)——D3D12设计哲学:显式控制与性能解锁
学习·3d·c·图形渲染·win32
charlie1145141916 个月前
通用GUI编程技术——图形渲染实战(四十)——深度缓冲与3D变换:从平面到立体
开发语言·c++·平面·3d·图形渲染·win32