【发布时间】:2012-11-04 06:49:58
【问题描述】:
我已经使用LoadImage() 函数加载了一个图标("c:\test.ico")
我怎样才能得到这个图标的大小? (其中的字节数)
我正在使用 c++ & winapi
HRSRC hRes = LoadImage ( NULL, icon, IMAGE_ICON, 0, 0, LR_LOADFROMFILE );
LPVOID lpResLock = LockResource(hRes);
(更准确地说,“lpResLock”指向的数据大小)
========更新======
我知道sizeofresource() 但问题是,它从可执行文件加载资源。正如我在我的问题中所示,我正在从磁盘文件加载一个独立的本地资源。第二个问题是,hResInfo 参数必须必须使用FindResource 函数创建,在我的情况下,我使用的是LoadImage().. 所以这无济于事
【问题讨论】:
-
.res(和 .exe 强制)中每个资源的布局是否有帮助? MS 很好地记录了从this document 开始的所有内容。 ICO file format 与它结合使用可能会为您提供所需的内容。
-
LoadImage 返回一个 HICON。它不返回 HRSRC。这意味着您问题的整个前提都是错误的。
-
您的代码返回一个 HICON。因为你通过了 IMAGE_ICON。 HICON 和 HRSRC 不兼容分配。我非常熟悉 HANDLE 的多态性。我也熟悉 LoadImage。
-
退后一步,想想你在说什么。您的论点将得出这样的结论,即 create file 返回的 HANDLE 可以转换为 HBITMAP,然后传递给对位图进行操作的函数。或者转换为 HWND,现在,嘿,马上,我们通过调用 CreateFile 得到了一个窗口。
-
LoadImage 并不总是返回 HICON。这取决于您传递的参数。您的代码通过 IMAGE_ICON。所以你的代码总是返回 HICON。 HICON 是图标的句柄。 HRSRC 是资源的句柄。它们不相同,并且它们不兼容分配。你可以很容易地确认这一点。例如,尝试调用 FindResource,然后调用 GetIconInfo。奇怪的是你的思想如此封闭。我无法想象你的态度怎么能学到任何东西。