关于Gif图片播放控件的几点说明

1、该控件主要作为一个OLE对象嵌入到RichEdit中使用,不仅仅要支持Gif,还要支持jpg、bmp、png等图片格式。

2、要载入各种图片文件到内存中,并将图片绘制到指定区域,要用到GDI+中的Image类。要处理带透明区域的png图片,需要用GDI+来处理。另外,Image类有GetFrameCount函数可获得Gif图片的帧数,并且还有SelectActiveFrame函数来设置当前帧图片,所以对于Gif图片而言,Image类很是方便。

3、将图片文件加载到Image对象中,使用Image::FromStream,而不使用Image::FromFile函数。因为使用Image::FromFile函数,会将磁盘上对应的文件“锁住”,其他地方如果要同时加载该文件则可能会出问题。(使用流加载的示例代码参见:使用GDI+进行图片处理时要注意的问题)

4、将GifAnimatorCtrl嵌入RichEdit中后,发现双击该OLE对象时会出现崩溃的现象,经调试发现是奔溃在IOleObjectImpl::DoVerb()中,所以在我们的控件类中要重新该接口,在接口中直接return,即:

	STDMETHOD(DoVerb)(
		_In_ LONG iVerb, 
		_In_opt_ LPMSG /* pMsg */, 
		_Inout_ IOleClientSite* pActiveSite, 
		_In_ LONG /* lindex */,
		_In_ HWND hwndParent, 
		_In_ LPCRECT lprcPosRect)
	{
		return S_OK;
	}


你可能感兴趣的:(GDI+,im即时通讯)