想按照如下自定义文件的方式,来从资源中导出资源并写入自定义的格式文件中
FindResource
LoadResource
LockResource
WriteFile但是发现ico格式文件根本行不通
FindResource用的第三个参数为RT_GROUP_ICON 或RT_ICON
有的ico资源不会出错,有的ico资源就会返回1813或1814错误没有出错的情况下,最后写成ico文件,也是错误的。 比如一个4kB的ico
最后写成后只有几十字节,图标是系统默认的文件图标我只想从资源中导出ico资源并正确写入ico文件
请问有什么方法吗?
谢谢
附原帖http://topic.csdn.net/u/20100721/15/29de8d97-34a2-4d57-8101-db726d39f0b7.html

解决方案 »

  1.   

    你可以用LoadIcon得到HICON句柄,然后用下面的代码写入ICO文件:
    void   SaveThePicture(IUnknown*   pUnk) 
      { 
      IPicture*   pPicture   =   0; 
      
              HRESULT   hr   =   pUnk-> QueryInterface(&pPicture); 
      
              if(SUCCEEDED(hr)) 
              { 
                      IStorage*   pStg   =   0; 
      
                      hr   =   ::StgCreateDocfile(L "c:\\picttest ",   
                                STGM_SHARE_EXCLUSIVE   |   
                                STGM_CREATE   |   
                                STGM_READWRITE,   
                                0,   &pStg); 
                      if(SUCCEEDED(hr)) 
                      { 
                              IStream*   pStream   =   0; 
              
                              hr   =   pStg-> CreateStream(L "PICTURE ",   
                                        STGM_SHARE_EXCLUSIVE   |   
                                        STGM_CREATE   |   
                                        STGM_READWRITE,   
                                        0,   0,   &pStream); 
                              if(SUCCEEDED(hr)) 
                              { 
                                      hr   =   pPicture-> SaveAsFile(pStream,   
                                                TRUE,   //   save   mem   copy 
                                                NULL); 
                                      pStream-> Release(); 
                              } 
                              pStg-> Release(); 
                      } 
                      pPicture-> Release(); 
              } 
      } 
      

  2.   

    还有HICON句柄貌似也没看到有用到啊这段代码网上我也有看到只是还不清楚怎么用
      

  3.   

    但是具体的是用的哪个CLS_**
    这个术语叫什么我也忘了能否具体点呢?
      

  4.   

    这个我有用过了
    用了SaveIcon这个函数
    但是导出来的ico整个都乱掉了,不是原先的那个了,
    这个也不知道什么原因
      

  5.   

    这个也下过了
    貌似没看到从hicon写文件的
      

  6.   

    有的,里面有个函数:void CIconSnapDlg::OnButtonSaveas() 
      

  7.   

    你可以试着从icon的文件格式进行数据的分析写入
      

  8.   

    我试了下SaveIcon,没有问题,很正常啊
      

  9.   


    UINT ExtractIconEx(
        LPCTSTR lpszFile,
        int nIconIndex,
        HICON *phiconLarge,
        HICON *phiconSmall,
        UINT nIcons
    );函数不是可以吗
      

  10.   

    可能是ico图标不一样吧,我也有试过可以的,
    但是16*16最后变成了32*32的了
    但是有很多的ico都不行
      

  11.   

    http://blog.csdn.net/stwstw0123/archive/2009/05/25/4214195.aspx
    差不多就是7楼的连接,稍微改了下
    然后自己再改下,终于搞定了,
    有时间再详细的研究下,ico文件的结构了
      

  12.   

    奇怪的是为什么ico的格式文件要自己分析他的结构呢
    而其他的像dll,ini等就不用了呢这个是怎么回事,谁能给个答案的?
    谢谢了