PictureEx圖片顯示類支持以下格式的圖片:GIF (including animated GIF87a and GIF89a), JPEG, BMP, WMF, ICO, CUR等,我特別推崇的是可以做出動畫,而且輕而易舉,確實很COOL。
下面是詳細的編程過程:
1. 新建項目:在VC6中用MFC新建一個基於對話框的GifDemo應用程序,接受所有缺省選項即可;
2.在項目中插入文件:把PictureEx.h,PictureEx.cpp文件copy 到項目文件夾下,Project->Add to Project->Files中選上PictureEx.h,PictureEx.cpp, Insert;
3.加入圖片控件:從對話框控件中把Picture Control(圖片控件)拖入主對話框中,修改其屬性:ID:IDC_GIF,TYPE:Rectangle,其余接受缺省選項。再在ClassWiard中為IDF_GIF加入CSatic控制變量m_GifPic, 注意看一下,GifDemoDlg.h中是否加上了#include "PictureEx.h"(由ClassWiard加入)。然後將CSatic m_GifPic;更改成CPictureEx m_GifPic;
4.加載動畫文件:先將要加載的動畫文件放到 res 資源文件夾下,再將其Import進項目中,由於MFC只支持256BMP文件的圖片,因此,我們要新建一個圖片類型:"GIF",我在這裡將我網站的宣傳圖片roaring.gif放進去 ,並將其ID修改成:IDR_GIFROARING。
import(導入)gif動畫的詳細過程:
在resourcevIEw窗口中,單擊鼠標右鍵,在出現的環境菜單中選擇“import...”命令,會出現“import resource”選擇文件對話框,文件類型選擇“所有文件(*.*)”,open as 選項為"auto",再選擇動畫文件所在目錄,選上要載入的動畫文件 roaring.gif,再單擊 import,由於gif動畫類型不是vc默認的文件類型,這時會出現"custom resource type"對話框,鍵入“"gif"”,再單擊ok,然後再修改其id。
5.在程序的適當位置添入加載代碼: 這裡,我們在CGIfDemoDlg::OnInitDialog()函數中加入如下代碼:
// TODO: Add extra initialization here
if (m_GifPic.Load(MAKEINTRESOURCE(IDR_GIFROARING),_T("Gif")))
m_GifPic.Draw();
如果僅僅把動畫載入,到這就可以了,運行一下,應該看看您的的成果了。
下面附帶說說如何將這幅動畫制作成超鏈接,以後,咱們也可以宣傳自已的公司、網站或產品了。
6.利用ClassWiard加入一個LButtonDown鼠標左鍵消息處理函數CGIfDemoDlg::OnLButtonDown(UINT nFlags, CPoint point), 添入如下代碼:
void CGIfDemoDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CRect rect;
m_GifPic.GetWindowRect(&rect);
ScreenToClIEnt(&rect);
if (rect.PtInRect(point))
ShellExecute(AfxGetMainWnd() ->m_hWnd,_T("open"),
_T("http://roaringwind.best.163.com"),_T(""),NULL,0);
CDialog::OnLButtonDown(nFlags, point);
}
我在這兒將我主頁的地址放上了,運行,點擊動畫圖片就能進入我的站點的了。當然要是能象所有的超鏈接一樣,能將鼠標變成手形,就更好了。
7.改變鼠標形狀:將一個鼠標文件放在res文件夾中,IMPORT,ID:IDC_CURSOR1,利用ClassWiard加入一個WM_SETCURSOR消息處理函數CGIfDemoDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message), 添入如下代碼:
BOOL CGIfDemoDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// TODO: Add your message handler code here and/or call default
CRect rect;
m_GifPic.GetWindowRect(&rect);
ScreenToClIEnt(&rect);
CPoint point;
GetCursorPos(&point);
ScreenToClIEnt(&point);
if (rect.PtInRect(point) && m_hCursor)
{
SetCursor(m_hCursor);
return TRUE;
};
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}