我以前用Bmp文件作为DialogBox的背景图片 但是Bmp实在是太大了 一加到资源里面立马软件体积巨增,所以我想有没有什么方法减少软件体积比如使用Jpg作为背景图片 但是我不知道如何使:(

解决方案 »

  1.   

    用IPicture接口
    HBITMAP LoadAnImage(
      LPCTSTR FileName  // image to load
      )
    {
       // Use IPicture stuff to use JPG / GIF files
       IPicture* p;
       IStream* s;
       HGLOBAL hG;
       void* pp;
       FILE* fp;
       if (FileName == NULL || _tcscmp(FileName, "") == 0)
    return NULL;   // Read file in memory
       fp = fopen(FileName,"rb");
       if (!fp)
    return NULL;   fseek(fp,0,SEEK_END);
       int fs = ftell(fp);
       fseek(fp,0,SEEK_SET);
       hG = GlobalAlloc(GPTR,fs);
       if (!hG)
          {
          fclose(fp);
          return NULL;
          }
       pp = (void*)hG;
       fread(pp,1,fs,fp);
       fclose(fp);   // Create an IStream so IPicture can 
       CreateStreamOnHGlobal(hG,false,&s);
       if (!s)
       {
          GlobalFree(hG);
          return NULL;
       }   OleLoadPicture(s,0,false,IID_IPicture,(void**)&p);   if (!p)
       {
          s->Release();
          GlobalFree(hG);
          return NULL;
       }
       s->Release();
       GlobalFree(hG);   HBITMAP hB = 0;
       p->get_Handle((unsigned int*)&hB);   // Copy the image. Necessary, because upon p's release,
       // the handle is destroyed.
       HBITMAP hBB = (HBITMAP)CopyImage(hB,IMAGE_BITMAP,0,0,
                                        LR_COPYRETURNORG);   p->Release();
       TRACE2("\nFILE: %s, HANDLE: 0x%x", FileName, (UINT)hBB);
       return hBB;
    }
      

  2.   

    或者使用GdiPlus我写了一份详细的快速入门,以及demo工程,到这里下载即可:
    http://www.bypro.net/PostAttachment.aspx?PostID=23134&AttachmentID=1933