非API序列化ImageList_Write2和ImageList_Read2

本文介绍了在Windows编程中,为适应非IStream二进制流类,作者自定义实现了ImageList_Write2和ImageList_Read2函数,用于序列化和反序列化ImageList对象。这些函数通过处理图像和掩码位图的数据,保存和加载ImageList的内容。详细代码展示了如何操作HIMAGELIST并进行数据流操作。
摘要由CSDN通过智能技术生成

ImageList是windows上一个比较重要的对象,可以方便的管理一串图标,其中ImageList_Write和ImageList_Read这两个API为我们提供了一个序列化ImageList的方法,但必须使用IStream接口来操作。在上次开发的一个工程中,因为使用了一个不同于IStream的二进制流类,为了使用该流进行ImageList的保存,我重新实现了自己的ImageList_Write2和ImageList_Read2.

下面贴出代码:

 

  1. BOOL HTImageListWrite2(HIMAGELIST img,CStream &s)
  2. {
  3.     INT dx,dy ;
  4.     IMAGEINFO imginf;
  5.     BITMAP bmp;
  6.     INT i;
  7.     WORD bitCount=32;
  8.     INT nTotalImages=ImageList_GetImageCount(img);
  9.     INT nValidImages=nTotalImages;
  10.     ImageList_GetIconSize(img,&dx,&dy);
  11.     s <<dx
  12.       <<dy
  13.       <<ImageList_GetBkColor(img);//background color
  14.     if(nTotalImages<=0){
  15.         s<<bitCount;
  16.     }else{      
  17.         ImageList_GetImageInfo(img,0,&imginf);
  18.         GetObject(imginf.hbmImage,sizeof(BITMAP),(LPSTR)&bmp);   
  19.         s<<bmp.bmBitsPixel;//颜色位数
  20.     }
  21.     s <<nTotalImages;
  22.     
  23.     if(nTotalImages<=0){
  24.         LOG0('E',"HTImageListWrite2","No valid iamges/r/n");
  25.         return TRUE;
  26.     }
  27.     HDC hdcDevice=GetDC(NULL);
  28.     DWORD dwImgPixelsInStreamOffset,dwImgBmpiInStreamOffset;
  29.     LPBYTE pImgPixelsInStream;
  30.     LPBITMAPINFOHEADER pImgBmpiInStream;
  31.     CreateBitmapStream(hdcDevice,imginf.hbmImage,dx,dy*nValidImages,s,
  32.         &dwImgBmpiInStreamOffset,&dwImgPixelsInStreamOffset);
  33.     DWOR
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值