MFCダイアログボックスが表示されたGIF画像転送MFC GDI + GIFはディスプレイ「ターン」ファイル

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

おすすめ

転載: www.cnblogs.com/wuguoqiang/p/11812740.html