我用CImage的Load函数载入了一张图片,将CImage转换为HBITMAP后,再用CPictureHolder载入该HBITMAP,然后得到IPictureDisp* ,再将其传到控件,但是......控件不显示......汗喔.
代码如下:
       CImage img;
       img.Load ("C:\\200411191193_841716.bmp");       HBITMAP hbm;
       hbm = HBITMAP(img);       //奇怪的是,这里用img.Detach ()就能显示,但是HBITMAP
                                 //不释放就有内存泄漏,若释放则控件又不能显示鸟,狂汗.       CPictureHolder m_pic;
       m_pic.CreateFromBitmap (hbm);       IPictureDisp* pDisp;
       pDisp=m_pic.GetPictureDispatch ();       m_ctrl.SetBackPicture (pDisp); //这是我自己控件的设置图像方法,用MS的原装控件问
                                      //题一样
       pDisp->Release ();
是CImage类的问题吗?我用传统的LoadImage函数产生出的HBITMAP则没问题,但是CImage生成的HBITMAP用其他方法也能成功绘图,看来也没问题,我晕了啊.

解决方案 »

  1.   

    我也用过几次CImage,很难用,最后放弃了,直接用接口搞了。
      

  2.   

    hbm = HBITMAP(img);       //奇怪的是,这里用img.Detach ()就能显示,但是HBITMAP
                                     //不释放就有内存泄漏,若释放则控件又不能显示鸟,狂汗.这里的句柄需要在其它地方delete. 因为后面还要用。释放了控件当然不能显示。
    m_ctrl.SetBackPicture (pDisp); //这是我自己控件的设置图像方法,用MS的原装控件问
                                          //题一样
    IPictureDisp 你使用正确了吗?  
    The IPictureDisp interface exposes the picture object's properties through Automation. It provides a subset of the functionality available through IPicture methods.
    需要查找到 IPicture. 看看图形数据有没有。