MFC GDI + GIFはディスプレイ "ターン" ファイル
付加されたヘッダファイルで:
画像* 画像。
GUIDのGuid。
UINT frameCount;
UINT framePos; ULONG_PTR gdiplusToken;
空のOnTimer(UINT_PTR nIDEvent)AFX_MSG。空LoadGif();
あなたは、ヘッダファイルに依存する必要があります。
書式#include <Gdiplusheaders.h>
書式#include <Gdiplus.h> 使用して名前空間のGdiPlusを。
インタフェースを追加したクラスのコンストラクタ:
// GDIイメージを開始:: FROMFILEが他の失敗
gdiplusStartupInput gdiplusStartupInput;
GdiplusStartup(&gdiplusToken、&gdiplusStartupInput、NULLを);
画像= NULL; frameCount = 0 ; framePos = 0;
タイマーメッセージ処理を追加します。
BEGIN_MESSAGE_MAP(CMFCApplication1Dlg、CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1、&CMFCApplication1Dlg :: OnBnClickedButton1)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_BUTTON2、&CMFCApplication1Dlg :: OnBnClickedButton2)
END_MESSAGE_MAP()
GIFファイルをロードします。
ボイドCMFCApplication1Dlg :: LoadGif()
{
WCHAR strModule [MAX_PATH * 2] = { 0 }; GetModuleFileNameW(NULL、strModule、MAX_PATH * 2 ); :: PathRemoveFileSpecW(strModule); wsprintfW(strModule +たwcslen(strModule)、L " \ \%s.gif 」、L " sVcodec " );画像= 画像:: FROMFILE(strModule); // ための次元数を取得寸法にGIF COUNT =イメージ- UINT> GetFrameDimensionsCount(); * pDimensionIDsのGUID = (GUID *)新しい新しいGUID [COUNT];イメージ- > GetFrameDimensionsList(pDimensionIDs、COUNT); WCHAR strGuid [ 39 ]; StringFromGUID2(pDimensionIDs [ 0]、strGuid、39 ); frameCount =イメージ- > GetFrameCount(&pDimensionIDs [ 0 ]); // 削除[] pDimensionIDs; // フレーム間の時間間隔は、GET // 最初の時間間隔の数を得、PropertyTagFrameDelayは、GDI +事前定義されフレームデータタグ=イメージ- FrameDelayNums UINT>の遅延時間を示すGIG ID属性値GetPropertyItemSize(PropertyTagFrameDelay)を、PropertyItem * = lpPropertyItem 新しい新しいPropertyItem [FrameDelayNums];イメージ- > GetPropertyItem(PropertyTagFrameDelay、FrameDelayNums、lpPropertyItem)のGUID = FrameDimensionTime。イメージ- > SelectActiveFrame(&GUID、framePosザ);}
タイマー処理:
ボイドCMFCApplication1Dlg ::のOnTimer(UINT_PTR nIDEvent)
{ 場合(画像) { CWndの* PIC = GetDlgItem(IDC_STATIC_PIC)。 グラフィックGH(pic-> GetDC() - > m_hDC)。CRect RECT; GetDlgItem(IDC_STATIC_PIC) - > GetClientRect(&RECT)。gh.DrawImage(イメージ、0、0 、rect.Width()、rect.Height())。// gh.DrawImage(イメージ、0、0、イメージ- >のgetWidth()、イメージ- >のgetHeight()); // 设置当前需要显示的帧数イメージ- > SelectActiveFrame(&GUID、framePos)。framePos ++ ; IF(framePos == frameCount){framePos = 0 。}} CDialogEx ::のOnTimer(nIDEvent)。}
スタートタイマー:
SetTimer(0、400 、NULL);
LoadGif();
ライブラリに依存するGDIの必要性:
gdiplus.lib
参考住所:https://blog.csdn.net/sz76211822/article/details/51507616
付加されたヘッダファイルで:
画像* 画像。
GUIDのGuid。
UINT frameCount;
UINT framePos; ULONG_PTR gdiplusToken;
空のOnTimer(UINT_PTR nIDEvent)AFX_MSG。空LoadGif();
あなたは、ヘッダファイルに依存する必要があります。
書式#include <Gdiplusheaders.h>
書式#include <Gdiplus.h> 使用して名前空間のGdiPlusを。
インタフェースを追加したクラスのコンストラクタ:
// GDIイメージを開始:: FROMFILEが他の失敗
gdiplusStartupInput gdiplusStartupInput;
GdiplusStartup(&gdiplusToken、&gdiplusStartupInput、NULLを);
画像= NULL; frameCount = 0 ; framePos = 0;
タイマーメッセージ処理を追加します。
BEGIN_MESSAGE_MAP(CMFCApplication1Dlg、CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1、&CMFCApplication1Dlg :: OnBnClickedButton1)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_BUTTON2、&CMFCApplication1Dlg :: OnBnClickedButton2)
END_MESSAGE_MAP()
GIFファイルをロードします。
ボイドCMFCApplication1Dlg :: LoadGif()
{
WCHAR strModule [MAX_PATH * 2] = { 0 }; GetModuleFileNameW(NULL、strModule、MAX_PATH * 2 ); :: PathRemoveFileSpecW(strModule); wsprintfW(strModule +たwcslen(strModule)、L " \ \%s.gif 」、L " sVcodec " );画像= 画像:: FROMFILE(strModule); // ための次元数を取得寸法にGIF COUNT =イメージ- UINT> GetFrameDimensionsCount(); * pDimensionIDsのGUID = (GUID *)新しい新しいGUID [COUNT];イメージ- > GetFrameDimensionsList(pDimensionIDs、COUNT); WCHAR strGuid [ 39 ]; StringFromGUID2(pDimensionIDs [ 0]、strGuid、39 ); frameCount =イメージ- > GetFrameCount(&pDimensionIDs [ 0 ]); // 削除[] pDimensionIDs; // フレーム間の時間間隔は、GET // 最初の時間間隔の数を得、PropertyTagFrameDelayは、GDI +事前定義されフレームデータタグ=イメージ- FrameDelayNums UINT>の遅延時間を示すGIG ID属性値GetPropertyItemSize(PropertyTagFrameDelay)を、PropertyItem * = lpPropertyItem 新しい新しいPropertyItem [FrameDelayNums];イメージ- > GetPropertyItem(PropertyTagFrameDelay、FrameDelayNums、lpPropertyItem)のGUID = FrameDimensionTime。イメージ- > SelectActiveFrame(&GUID、framePosザ);}
タイマー処理:
ボイドCMFCApplication1Dlg ::のOnTimer(UINT_PTR nIDEvent)
{ 場合(画像) { CWndの* PIC = GetDlgItem(IDC_STATIC_PIC)。 グラフィックGH(pic-> GetDC() - > m_hDC)。CRect RECT; GetDlgItem(IDC_STATIC_PIC) - > GetClientRect(&RECT)。gh.DrawImage(イメージ、0、0 、rect.Width()、rect.Height())。// gh.DrawImage(イメージ、0、0、イメージ- >のgetWidth()、イメージ- >のgetHeight()); // 设置当前需要显示的帧数イメージ- > SelectActiveFrame(&GUID、framePos)。framePos ++ ; IF(framePos == frameCount){framePos = 0 。}} CDialogEx ::のOnTimer(nIDEvent)。}
スタートタイマー:
SetTimer(0、400 、NULL);
LoadGif();
ライブラリに依存するGDIの必要性:
gdiplus.lib
参考住所:https://blog.csdn.net/sz76211822/article/details/51507616