将HICON转换为unsigned long

时间:2009-07-03 12:27:15

标签: c++

我正试图从系统中获取Icon。通过使用SHGetFileInfo,我得到了HICON,

我用以下代码测试了这个HICON:

SHFILEINFO info;    //For getting information about the file
if (::SHGetFileInfo(ucPath.GrabTString(), 0,&info, sizeof(info), SHGFI_ICON | SHGFI_SMALLICON | SHGFI_SHELLICONSIZE) != NULL) 
{
//Control view of the 
  if (iconView != NULL){
        HDC hDC = GetDC(NULL);  //Get the screen DC
    DrawIconEx(hDC, 300, 200, info.hIcon, 0, 0, 0, NULL, DI_NORMAL);  //Draw icon on 300, 200 location
    ReleaseDC(NULL, hDC);
    //following line is not working
    iconView->SetRsrcID((unsigned long) info.hIcon);
  }
  ::DestroyIcon(info.hIcon);
}

在屏幕上的位置(300,200)它显示我的图标, 我想将此图标设置为树视图,因为我需要资源ID, 如果有人知道,请建议如何将此句柄转换为无符号长。

谢谢, Praveen Mamdge

2 个答案:

答案 0 :(得分:1)

资源ID是您在可执行文件中拥有的资源的标识符。您可以将此标识符与MAKEINTRESOURCE一起用于需要资源标识符的函数。

对于树视图,使用TreeView_SetImageList,然后每个项都获得一个相对于此列表的索引。

因此,您需要使用要使用的图标构建图像列表,将其传递到树视图,然后为每个项目使用适当的索引。

要创建操作图像列表,您可以使用ImageList_Create& ImageList_AddIcon等

这是1990年的事情。:))

答案 1 :(得分:0)

HANDLE不是资源ID。大多数可以获取文件和资源ID的函数也有一个直接接受HANDLE的版本。

此链接on CodeProject可能就是您要找的内容。