在开发MFC项目时,经常需要处理各种图片格式,如JPEG、GIF等。静态图片的显示相对简单,但动画GIF的处理则较为复杂。本文将介绍一个名为CPictureEx的类,它能够处理包括动画GIF在内的多种图片格式。
CPictureEx类是为了满足一个MFC项目的需求而编写的,该项目需要支持JPEG和GIF格式的横幅广告。虽然使用OleLoadPicture函数和IPicture接口可以轻松显示静态图片,但处理动画GIF却是一个完全不同的问题。
CPictureEx类的基本思想是将GIF分解为单独的帧,并使用OleLoadPicture和IPicture的组合来显示这些帧。在深入研究了GIF87a和GIF89a的规范后,作者编写了这个类。值得注意的是,CPictureEx不仅可以显示GIF(包括动画GIF),还可以显示JPEG、BMP、WMF、ICO和CUR等格式的图片。
要在MFC项目中使用CPictureEx类,首先需要在对话框中添加一个静态文本或图片控件,并将该控件的ID更改为例如IDC_MYPICTURE。然后,使用ClassWizard将成员变量(例如m_Picture)与添加的控件关联起来。在对话框的头文件中,将变量类型从CStatic更改为CPictureEx,并确保包含PictureEx.h。在OnInitDialog函数(或任何喜欢的地方)中,添加以下代码:
if (m_Picture.Load(_T("mypicture.gif")))
m_Picture.Draw();
这样,就可以坐下来欣赏动画了。
要在ATL项目中使用CPictureEx类(CPictureExWnd),可以按照与MFC相同的步骤操作,但不需要使用ClassWizard。手动在类中添加一个CPictureExWnd类型的变量,并在WM_INITDIALOG处理函数中添加以下代码:
HWND hWnd = GetDlgItem(IDC_MYPIC);
if (hWnd) m_wndBanner.SubclassWindow(hWnd);
之后,可以调用CPictureExWnd::Load()和CPictureExWnd::Draw()。当然,也可以直接调用CPictureExWnd::Create,因为CPictureExWnd只是具有一些额外功能的另一个窗口。
CPictureEx类提供了多个接口函数,包括: