描述:
我用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:
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. 看看图形数据有没有。