CPictureEx 開源類別支援 GIF (含動畫 GIF87a/89a)、JPEG、BMP、WMF、ICO 等格式,且介面簡單。本文示範在 Dialog-based 專案中載入動畫 GIF、點擊跳轉網址、滑鼠懸停切換手型游標。
GifDemo。PictureEx.h、PictureEx.cpp 複製至專案目錄,專案 → Add to Project → Files 選取兩檔。IDC_GIF,Type: Rectangle。IDC_GIF 加入控件變數 m_GifPic,類型 CStatic。CPictureEx m_GifPic; (取代 CStatic),並確認 #include "PictureEx.h"。roaring.gif 放入 res 目錄。roaring.gif。GIF,確定。IDR_GIFROARING。
BOOL CGifDemoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
if (m_GifPic.Load(MAKEINTRESOURCE(IDR_GIFROARING), _T("GIF")))
m_GifPic.Draw(); // 開始播放
return TRUE;
}
void CGifDemoDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
CRect rect; m_GifPic.GetWindowRect(&rect); ScreenToClient(&rect);
if (rect.PtInRect(point))
ShellExecute(m_hWnd, _T("open"), _T("https://roaringwind.best.163.com"), NULL, NULL, SW_SHOWNORMAL);
CDialog::OnLButtonDown(nFlags, point);
}
hand.cur 為游標資源,ID: IDC_CURSOR1。WM_SETCURSOR 訊息處理:
BOOL CGifDemoDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
CRect rect; m_GifPic.GetWindowRect(&rect); ScreenToClient(&rect);
CPoint pt; GetCursorPos(&pt); ScreenToClient(&pt);
if (rect.PtInRect(pt) && m_hCursor)
{
::SetCursor(m_hCursor);
return TRUE;
}
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}
在 OnInitDialog 載入游標:
m_hCursor = AfxGetApp()->LoadCursor(IDC_CURSOR1);
| 方法 | 說明 |
|---|---|
Load(resource, type) | 從資源或檔案載入圖片,type 為 "GIF"、"JPEG" 等。 |
Draw() | 啟動動畫播放 (內部設定 Timer 逐幀繪製)。 |
Stop() | 停止動畫。 |
GetWindowRect | 繼承自 CWnd,取得螢幕座標矩形。 |