根据这个句柄可以得到一个HBITMAP,然后就可以得到这个icon的Data,然后就可以把这些Data存入char数组,其实,不用存了 :)而且这个过程是可异de

解决方案 »

  1.   

    储存:GetIconInfo
    生成:CreateIconIndirect它们里面都有一个参数ICONINFO,包含了Icon的所有相关信息。想怎么改就怎么改
      

  2.   

    可是ICONINFO中有两个bmp句柄如何处理?
      

  3.   

    大概就是这个样子了
    LPBYTE lpBits=NULL;
    long size=0;
    HICON hicon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1));
    PICTDESC pdiconsrc;
    pdiconsrc.cbSizeofstruct=sizeof(PICTDESC);
    pdiconsrc.icon.hicon=hicon;
    pdiconsrc.picType=PICTYPE_ICON;
    IPicture* pIPicture=NULL;
        HRESULT hr;
    IDispatch* pDisp=NULL;
        hr = OleCreatePictureIndirect(&pdiconsrc, 
                                       IID_IDispatch, 
                                       TRUE, 
                                       (void**)&pDisp);
    if(SUCCEEDED(hr))
    {
    hr = pDisp->QueryInterface(&pIPicture);
    if(SUCCEEDED(hr))
    {
    lpBits = (LPBYTE) GlobalAlloc(GMEM_MOVEABLE|GMEM_NODISCARD, 64*1024);
    IStream* pStream;
    CreateStreamOnHGlobal(lpBits,false,&pStream);
    hr=pIPicture->SaveAsFile(pStream,false,&size);
    if(pStream)
    pStream->Release();
    if(SUCCEEDED(hr)&&size>0)
    {
    //you can use 
    char* pchar=(char*)lpBits;
    //icon is stored in pchar, length is size
    //to create another hicon
    //use OleLoadPicture(pStream,...)
    //IPicture::get_Handle to get the icon handle
    }
    pIPicture->Release();
    if(lpBits)
    GlobalFree((HGLOBAL)lpBits);
    }
    pDisp->Release();
    }