<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      EVC編程點(diǎn)滴-GIF動(dòng)畫顯示類

      【生活經(jīng)歷分享】華師國(guó)培 華師伴學(xué) 合同都是坑 消費(fèi)者付款后無法退款
      和華師國(guó)培簽合同需小心,合同中都是保護(hù)華師的條款,沒有保護(hù)消費(fèi)者的條款。
      收到錢,就算你因?qū)ε嘤?xùn)質(zhì)量不滿意,也不能退款。因合同消費(fèi)者維權(quán)肯定十分艱難。
      華師伴學(xué)的授課方式是看錄制的視頻,不是真人現(xiàn)場(chǎng)教學(xué)。是否是您和孩子想要的學(xué)習(xí)方式?
      各位打算報(bào)名的,交費(fèi)要謹(jǐn)慎!
      其他人在小紅書上發(fā)的,轉(zhuǎn):

      深圳市華師國(guó)培教育科技有限公司,黑心機(jī)構(gòu),大家擦亮眼睛,別被騙了,消費(fèi)欺詐,虛假承諾,簽合同各種坑,收到錢了不履行承諾不退款,亂扣費(fèi),維權(quán)艱難! - 小紅書

       

       


      此功能在我這個(gè)項(xiàng)目中,主要是顯示讓用戶等待的提示。如開機(jī)過程、待機(jī)界面調(diào)用一個(gè)系統(tǒng)應(yīng)用的過程、還有就是操作大尺寸圖片的過程。 剛開始是用自定義的一個(gè)窗體來提示用戶的,功能也可以實(shí)現(xiàn),但美觀度不夠。所以才花了一定時(shí)間,對(duì)網(wǎng)上這個(gè)類進(jìn)行研究。最終成功應(yīng)用于項(xiàng)目中。 這個(gè)類的實(shí)現(xiàn),主要是參考網(wǎng)上一個(gè)名為CGif89a類的實(shí)現(xiàn)。 此類在EVC4工程中可以正常使用。 索引: 1) GIF顯示類頭文件 2) GIF顯示類的實(shí)現(xiàn) 3) 調(diào)用CGIFShow類示例 (1) 定義全局變量 (2) 在窗體的WM_CREATE消息處理中初始化CGIFShow類的實(shí)例 (3) GIF動(dòng)畫顯示 (4) 最后記得清理內(nèi)存 =======================================
        1 1) GIF顯示類頭文件
        2 //////GIFShow.h////////
        3 #ifndef GIFSHOW_H
        4 #define GIFSHOW_H
        5 #define DISPOSAL_NO 0
        6 #define DISPOSAL_NOT 4
        7 #define DISPOSAL_RESTBACK 8
        8 #define DISPOSAL_RESTORE 12
        9 typedef struct
       10 {
       11     BYTE bit;
       12     WORD previouscode;
       13     WORD nextcode;
       14 }GIFTABLE;
       15 
       16 class CGIFShow
       17 {
       18 private:
       19     HDC     m_hWndHDC;
       20     bool    m_bPause;
       21     BOOL    m_bAutoStart;
       22     BOOL    m_bEmbed;
       23     BYTE    m_cCurentByte,m_cPackedField;
       24     UINT    m_uBitSize,m_uPrimaryBitSize;
       25     UINT    m_uRemain,m_uReadByte,m_uBlockSize;
       26     int     m_iWidth,m_iHeight;
       27     int     m_iTop,m_iLeft;
       28     int     m_iFinishCode,m_iResetCode;
       29     int     m_iPass,m_iRow;
       30     int     m_iWidth1;
       31     int     m_iBackgroundColor;
       32     int     m_iGifSize;
       33     int     m_x,m_y;
       34     int     m_iGlobalColorSize;
       35     int     m_iDisposalMethod;
       36     BOOL    m_bTransparentIndex;
       37     int     m_iTransparentIndex;
       38     int     m_iDelayTime;
       39     int     m_iTotalReadByte;
       40     int     m_iMaxByte;
       41     DWORD   m_dwSpeed;
       42     COLORREF m_TransparentColor;
       43     HDC     m_hDC;
       44     BYTE*   m_pcGlobalColorTable;
       45     BYTE*   m_pcBitmap;
       46     BYTE*   m_pcGif;
       47     BYTE*   m_pcGifTrack;
       48     BOOL    m_bGlass;
       49     volatile int m_EndRun;
       50     HBITMAP m_hRedrawBitmap;
       51     int     m_iGifWidth,m_iGifHeight;
       52     volatile BOOL   m_bLockBitmap;
       53     TCHAR   filename[_MAX_PATH];
       54     int     flag;
       55     BOOL    m_bRunMode;
       56     BOOL    m_bAutoSize1;
       57     int     m_nPosX;
       58     int     m_nPosY;
       59 public:
       60     CGIFShow(HDC pWnd);
       61     ~CGIFShow();
       62     void Play();
       63     void Pause(bool status);///暫停運(yùn)行
       64     void Stop();
       65     void SetPosition(int x,int y);
       66     BOOL Play1(void);
       67     BOOL Load(LPCTSTR filename);
       68     HBITMAP FirstImage(void);
       69     HBITMAP NextImage(void);
       70     HBITMAP TakeIt(void);
       71     HBITMAP DIBTohBitmap(HDC hDC,LPSTR   lpSrcDIB);
       72     void Output(BYTE bit)
       73     {
       74         int tmp;
       75         if(m_cPackedField&0x40)
       76         {
       77             if(m_x==m_iWidth)
       78             {
       79                 m_x=0;
       80                 if(m_iPass==1)m_iRow+=8;
       81                 if(m_iPass==2)m_iRow+=8;
       82                 if(m_iPass==3)m_iRow+=4;
       83                 if(m_iPass==4)m_iRow+=2;
       84                 if(m_iRow>=m_iHeight){m_iPass+=1;m_iRow=16>>m_iPass;}
       85             }
       86             tmp=m_iRow*m_iWidth1+m_x;
       87             m_pcBitmap[tmp]=bit;
       88             m_x++;
       89         }
       90         else
       91         {
       92             if(m_x==m_iWidth){m_x=0;m_y++;}
       93             tmp=m_y*m_iWidth1+m_x;
       94             m_x++;
       95         }
       96         if(tmp>m_iMaxByte)return;
       97         m_pcBitmap[tmp]=bit;
       98     }
       99     BYTE GetByte(void)
      100     {
      101         if(m_uReadByte>=m_uBlockSize)
      102         {
      103             m_uBlockSize=*m_pcGifTrack++;
      104             m_uReadByte=0;
      105             m_iTotalReadByte+=m_uBlockSize+1;
      106             if(m_iTotalReadByte>m_iGifSize){m_iTotalReadByte-=m_uBlockSize+1;return 0xFF;}
      107             if(m_uBlockSize==0){m_pcGifTrack--;m_iTotalReadByte--;return 0xFF;}
      108         }
      109         m_uReadByte++;
      110         return *m_pcGifTrack++;
      111     }
      112     WORD GetCode(void)
      113     {
      114         UINT tmp1;
      115         BYTE tmp;
      116         tmp=1;
      117         if(m_uRemain>=m_uBitSize)
      118         {
      119             tmp<<=m_uBitSize;
      120             tmp--;
      121             tmp1=m_cCurentByte&tmp;
      122             m_cCurentByte>>=m_uBitSize;
      123             m_uRemain-=m_uBitSize;
      124         }
      125         else
      126         {
      127             tmp<<=m_uRemain;
      128             tmp--;
      129             tmp1=m_cCurentByte;
      130             m_cCurentByte=GetByte();
      131             tmp=1;
      132             if(8>=(m_uBitSize-m_uRemain))
      133             {
      134                 tmp<<=(m_uBitSize-m_uRemain);
      135                 tmp--;
      136                 tmp1=(((UINT)(m_cCurentByte&tmp))<<m_uRemain)+tmp1;
      137                 m_cCurentByte>>=(m_uBitSize-m_uRemain);
      138                 m_uRemain=8-(m_uBitSize-m_uRemain);
      139             }
      140             else
      141             {
      142                 tmp1=(((UINT)(m_cCurentByte))<<m_uRemain)+tmp1;
      143                 m_cCurentByte=GetByte();
      144                 tmp<<=m_uBitSize-m_uRemain-8;
      145                 tmp--;
      146                 tmp1=(((UINT)(m_cCurentByte&tmp))<<(m_uRemain+8))+tmp1;
      147                 m_cCurentByte>>=m_uBitSize-m_uRemain-8;
      148                 m_uRemain=8-(m_uBitSize-m_uRemain-8);
      149             }
      150         }
      151         return tmp1;
      152     }
      153 };
      154 #endif
      155 =======================================
      156 
      157 #include "stdafx.h"
      158 #include "GifShow.h"
      159 DWORD WINAPI ThreadFunc(CGIFShow* ptr)
      160 {
      161     ptr->Play1();
      162     return 0;
      163 }
      164 void CGIFShow::Play()
      165 {
      166     HANDLE hThread;
      167     DWORD ThreadId;
      168     if(m_hWndHDC==0)return ;
      169     if(m_pcGif==0)return;
      170     if(m_EndRun==5)return;
      171     m_pcGifTrack=m_pcGif;
      172     m_iTotalReadByte=0;
      173     m_EndRun=5;
      174     hThread=CreateThread(NULL,0,(unsigned long(_stdcall*)(void*))ThreadFunc,this,0,&ThreadId);
      175     CloseHandle(hThread);
      176     return;
      177 }
      178 BOOL CGIFShow::Play1(void)
      179 {
      180     HDC hDC,hMemDC,hMemDC1,hPauseMemDC;
      181     HBITMAP hOldBitmap,hOldBitmap1,hBitmap,hPreviousBitmap,hPauseBitmap;
      182     DWORD systimer1,systimer2,speed;
      183     BOOL PauseShow = FALSE;
      184     hDC = m_hWndHDC;
      185     hMemDC = ::CreateCompatibleDC(hDC);
      186     hMemDC1 = ::CreateCompatibleDC(hDC);
      187     hPauseMemDC = ::CreateCompatibleDC(hDC);
      188     m_hDC = hDC;
      189     hPreviousBitmap = 0;
      190     while(m_bLockBitmap)
      191     {
      192     }
      193     m_bLockBitmap = TRUE;
      194     if(m_hRedrawBitmap != 0)
      195     {
      196         DeleteObject(m_hRedrawBitmap);
      197     }
      198     m_hRedrawBitmap = ::CreateCompatibleBitmap(hDC,m_iGifWidth,m_iGifHeight);
      199     hOldBitmap1 = (HBITMAP)SelectObject(hMemDC1,m_hRedrawBitmap);
      200     hPauseBitmap = ::CreateCompatibleBitmap(hDC,m_iGifWidth,m_iGifHeight);
      201     SelectObject(hPauseMemDC,hPauseBitmap);
      202     
      203     ::BitBlt(hMemDC1,0,0,m_iGifWidth,m_iGifHeight,hDC,m_nPosX,m_nPosY,SRCCOPY);
      204     SelectObject(hMemDC1,hOldBitmap1);
      205     m_bLockBitmap = FALSE;
      206     m_iDisposalMethod = DISPOSAL_NOT;
      207     while(1 != m_EndRun)
      208     {
      209         systimer2=systimer1 = GetTickCount();
      210         while(m_bLockBitmap)
      211         {
      212         }
      213         m_bLockBitmap = TRUE;
      214         hOldBitmap1 = (HBITMAP)SelectObject(hMemDC1,m_hRedrawBitmap);
      215         
      216         switch(m_iDisposalMethod)
      217         {
      218         case DISPOSAL_NO:
      219             break;
      220         case DISPOSAL_NOT:
      221             break;
      222         case DISPOSAL_RESTBACK:
      223         case DISPOSAL_RESTORE:
      224             hOldBitmap = (HBITMAP)SelectObject(hMemDC,hPreviousBitmap);
      225             ::BitBlt(hMemDC1,m_iLeft,m_iTop,m_iWidth,m_iHeight,hMemDC,0,0,SRCCOPY);
      226             SelectObject(hMemDC,hOldBitmap);
      227             DeleteObject(hPreviousBitmap);
      228             hPreviousBitmap = 0;
      229             break;
      230         }
      231         m_iDisposalMethod = DISPOSAL_NO;
      232         
      233         if(!PauseShow)
      234         {
      235             hBitmap=NextImage();
      236             switch(m_iDisposalMethod)
      237             {
      238             case DISPOSAL_NO:
      239                 break;
      240             case DISPOSAL_NOT:
      241                 break;
      242             case DISPOSAL_RESTBACK:
      243             case DISPOSAL_RESTORE:
      244                 hPreviousBitmap = ::CreateCompatibleBitmap(hDC,m_iWidth,m_iHeight);
      245                 hOldBitmap = (HBITMAP)SelectObject(hMemDC,hPreviousBitmap);
      246                 ::BitBlt(hMemDC,0,0,m_iWidth,m_iHeight,hMemDC1,m_iLeft,m_iTop,SRCCOPY);
      247                 SelectObject(hMemDC,hOldBitmap);
      248                 break;
      249             }
      250             hOldBitmap = (HBITMAP)SelectObject(hMemDC,hBitmap);
      251             if(m_bTransparentIndex)
      252             {
      253                 HBITMAP    bmAndBack, bmAndObject;
      254                 HBITMAP    bmBackOld, bmObjectOld;
      255                 HDC        hdcBack, hdcObject;
      256                 COLORREF cColor;
      257                 hdcBack = ::CreateCompatibleDC(hDC);
      258                 hdcObject = ::CreateCompatibleDC(hDC);
      259                 bmAndBack = CreateBitmap(m_iWidth,m_iHeight,1,1,NULL);
      260                 bmAndObject = CreateBitmap(m_iWidth,m_iHeight,1,1,NULL);
      261                 bmBackOld = (HBITMAP)SelectObject(hdcBack,bmAndBack);
      262                 bmObjectOld = (HBITMAP)SelectObject(hdcObject,bmAndObject);
      263                 cColor = SetBkColor(hMemDC,m_TransparentColor);
      264                 ::BitBlt(hdcObject,0,0,m_iWidth,m_iHeight,hMemDC,0,0,SRCCOPY);
      265                 SetBkColor(hMemDC,cColor);
      266                 ::BitBlt(hdcBack,0,0,m_iWidth,m_iHeight,hdcObject,0,0,NOTSRCCOPY);
      267                 ::BitBlt(hMemDC1,m_iLeft,m_iTop,m_iWidth,m_iHeight,hdcObject,0,0,SRCAND);
      268                 ::BitBlt(hMemDC,0,0,m_iWidth,m_iHeight,hdcBack,0,0,SRCAND);
      269                 ::BitBlt(hMemDC1,m_iLeft,m_iTop,m_iWidth,m_iHeight,hMemDC,0,0,SRCPAINT);
      270                 DeleteObject(SelectObject(hdcBack,bmBackOld));
      271                 DeleteObject(SelectObject(hdcObject,bmObjectOld));
      272                 DeleteDC(hdcBack);
      273                 DeleteDC(hdcObject);
      274             }
      275             else
      276             {
      277                 ::BitBlt(hMemDC1,m_iLeft,m_iTop,m_iWidth,m_iHeight,hMemDC,0,0,SRCCOPY);
      278             }
      279             SelectObject(hMemDC,hOldBitmap);
      280             DeleteObject(hBitmap);
      281             ::BitBlt(hDC,m_nPosX,m_nPosY,m_iGifWidth,m_iGifHeight,hMemDC1,0,0,SRCCOPY);
      282             ::BitBlt(hPauseMemDC,0,0,m_iGifWidth,m_iGifHeight,hMemDC1,0,0,SRCCOPY);
      283         }
      284         else
      285         {
      286             ::BitBlt(hDC,m_nPosX,m_nPosY,m_iGifWidth,m_iGifHeight,hPauseMemDC,0,0,SRCCOPY);
      287         }
      288         SelectObject(hMemDC1,hOldBitmap1);
      289         m_bLockBitmap = FALSE;
      290         if(0 != m_iDelayTime)
      291             speed = m_iDelayTime * 10;
      292         else
      293             speed=m_dwSpeed;
      294         while((1 != m_EndRun)&&(speed > systimer2 - systimer1))
      295         {
      296             Sleep(10);
      297             systimer2 = GetTickCount();
      298         }
      299     PauseShow = m_bPause;
      300     }
      301     if(hPreviousBitmap != 0)
      302         DeleteObject(hPreviousBitmap);
      303     DeleteDC(hMemDC);
      304     DeleteDC(hMemDC1);
      305     //::ReleaseDC(hDC);
      306     m_EndRun = 2;
      307     return TRUE;
      308 }
      309 
      310 void CGIFShow::Stop()
      311 {
      312     if(m_EndRun != 5)
      313         return;
      314     m_EndRun = 1;
      315     while(m_EndRun != 2)
      316     {
      317     }
      318     return;
      319 }
      320 CGIFShow::CGIFShow(HDC pWnd)
      321 {
      322     m_hWndHDC=pWnd;
      323     m_bPause=FALSE;
      324     m_bAutoStart=TRUE;
      325     m_bAutoSize1=TRUE;
      326     m_bEmbed=FALSE;
      327     m_pcGlobalColorTable=0;
      328     m_pcGif=0;
      329     m_iGifSize=0;
      330     m_iGlobalColorSize=0;
      331     m_bTransparentIndex=FALSE;
      332     m_iDelayTime=0;
      333     m_EndRun=0;
      334     m_dwSpeed=50;
      335     m_hRedrawBitmap=0;
      336     m_bLockBitmap=FALSE;
      337     flag=0;
      338     m_nPosX=0;
      339     m_nPosY=0;
      340     wcscpy(filename,_T(""));
      341     m_bRunMode=1;
      342     m_bGlass=FALSE;
      343 }
      344 CGIFShow::~CGIFShow(void)
      345 {
      346     Stop();
      347     if(m_hRedrawBitmap!=0)
      348         DeleteObject(m_hRedrawBitmap);
      349     if(m_pcGlobalColorTable!=NULL)
      350         delete[] m_pcGlobalColorTable;
      351     if(m_pcGif!=NULL)
      352         delete[] m_pcGif;
      353 }
      354 BOOL CGIFShow::Load(LPCTSTR filename)
      355 {
      356     HANDLE hFile;
      357     DWORD size,size1,readbyte;
      358     BYTE temp[13];
      359     if(m_bEmbed)
      360         return FALSE;
      361     
      362     Stop();
      363     if(m_pcGlobalColorTable!=NULL)
      364         delete[] m_pcGlobalColorTable;
      365     if(m_pcGif!=NULL)
      366         delete[] m_pcGif;
      367     if(m_hRedrawBitmap!=0)
      368     {
      369         DeleteObject(m_hRedrawBitmap);
      370         m_hRedrawBitmap=0;
      371     }
      372     m_pcGlobalColorTable=m_pcGif=0;
      373     m_iTotalReadByte=0;
      374     m_iGifSize=m_iGlobalColorSize=0;
      375     
      376     hFile = CreateFile(filename,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
      377     if(INVALID_HANDLE_VALUE==hFile)
      378         return FALSE;
      379     size=GetFileSize(hFile,&size1);
      380     if(size==0xFFFFFFFF)
      381     {
      382         CloseHandle(hFile);
      383         return FALSE;
      384     }
      385     ReadFile(hFile,temp,13,&readbyte,NULL);
      386     if((readbyte!=13)||((temp[0]!='G')||(temp[1]!='I')||
      387         (temp[2]!='F')||(temp[3]!='8')||((temp[4]!='7')&&
      388         (temp[4]!='9'))||(temp[5]!='a')))
      389     {
      390         CloseHandle(hFile);
      391         return FALSE;
      392     }
      393     
      394     m_iGifWidth=*(temp+6);
      395     m_iGifHeight=*(temp+8);
      396     m_iBackgroundColor=temp[11];
      397     if(temp[10]&0x80)
      398     {
      399         m_iGlobalColorSize=0x01<<((temp[10]&0x07)+1);
      400         m_pcGlobalColorTable=new BYTE[3*m_iGlobalColorSize];
      401         ReadFile(hFile,m_pcGlobalColorTable,3*m_iGlobalColorSize,&readbyte,NULL);
      402         if(readbyte!=(DWORD)3*m_iGlobalColorSize)
      403         {
      404             delete[] m_pcGlobalColorTable;
      405             m_pcGlobalColorTable=0;
      406             m_iGlobalColorSize=0;
      407             CloseHandle(hFile);
      408             return FALSE;
      409         }
      410     }
      411     m_iGifSize=size-3*m_iGlobalColorSize-12;
      412     m_pcGifTrack=m_pcGif=new BYTE[m_iGifSize];
      413     ReadFile(hFile,m_pcGif,m_iGifSize,&readbyte,NULL);
      414     CloseHandle(hFile);
      415     return TRUE;
      416 }
      417 HBITMAP CGIFShow::NextImage(void)
      418 {
      419     if(m_pcGif==NULL)return 0;
      420     
      421 label2: if(m_iTotalReadByte>m_iGifSize)
      422     {
      423         m_pcGifTrack=m_pcGif;
      424         m_iTotalReadByte=0;return 0;
      425     }
      426     m_iTotalReadByte++;
      427     switch(*m_pcGifTrack++)
      428     {
      429     case 0x2C:
      430         return TakeIt();
      431         break;
      432     case 0x21:
      433             BYTE cSize;
      434             m_iTotalReadByte++;
      435             switch(*m_pcGifTrack++)
      436             {
      437             case 0xF9:
      438                 m_pcGifTrack++;//block size
      439                 m_iDisposalMethod=(*m_pcGifTrack)&28;
      440                 m_bTransparentIndex=(*m_pcGifTrack++)&1;
      441                 m_iDelayTime=*m_pcGifTrack;
      442                 m_pcGifTrack+=2;
      443                 m_iTransparentIndex=*m_pcGifTrack++;
      444                 m_iTotalReadByte+=5;
      445                 break;
      446             case 0xFE:
      447                 while((cSize=*m_pcGifTrack)!=0)
      448                 {
      449                     m_pcGifTrack+=cSize+1;
      450                     m_iTotalReadByte+=cSize+1;
      451                     if(m_iTotalReadByte>m_iGifSize)
      452                         return 0;
      453                 }
      454                 break;
      455             case 0x01:
      456                 m_pcGifTrack+=13;
      457                 m_iTotalReadByte+=13;
      458                 while((cSize=*m_pcGifTrack)!=0)
      459                 {
      460                     m_pcGifTrack+=cSize+1;
      461                     m_iTotalReadByte+=cSize+1;
      462                     if(m_iTotalReadByte>m_iGifSize)
      463                         return 0;
      464                 }
      465                 break;
      466             case 0xFF:
      467                 m_pcGifTrack+=12;
      468                 m_iTotalReadByte+=12;
      469                 while((cSize=*m_pcGifTrack)!=0)
      470                 {
      471                     m_pcGifTrack+=cSize+1;
      472                     m_iTotalReadByte+=cSize+1;
      473                     if(m_iTotalReadByte>m_iGifSize)
      474                         return 0;
      475                 }
      476                 break;
      477             default:
      478                 return FALSE;
      479             }
      480             m_pcGifTrack++;
      481             m_iTotalReadByte++;
      482             if(m_iTotalReadByte>m_iGifSize)
      483                 return 0;
      484             goto label2;
      485             break;
      486     case 0x3B:
      487         m_pcGifTrack=m_pcGif;
      488         m_iTotalReadByte=0;
      489         goto label2;
      490     case 0:
      491         goto label2;
      492     default:
      493         return FALSE;
      494     }
      495 }
      496 HBITMAP CGIFShow::TakeIt(void)
      497 {
      498     UINT uLocalColorTableSize;
      499     WORD code,oldcode,code1;
      500     int iFinishCode,iResetCode;
      501     int iPrimaryTableSize,iTableSize;
      502     BITMAPINFOHEADER *bitmapheader;
      503     BYTE *pcColorTable;
      504     BYTE *pcInfo;
      505     GIFTABLE *pcGifTable;
      506     HBITMAP hBitmap;
      507     m_iLeft=*m_pcGifTrack;
      508     m_pcGifTrack+=2;
      509     m_iTop=*m_pcGifTrack;
      510     m_pcGifTrack+=2;
      511     m_iWidth=*m_pcGifTrack;
      512     m_pcGifTrack+=2;
      513     m_iWidth1=((m_iWidth-1)|0x3)+1;
      514     m_iHeight=*m_pcGifTrack;
      515     m_pcGifTrack+=2;
      516     m_cPackedField=*m_pcGifTrack++;
      517     m_iTotalReadByte+=9;
      518     m_iMaxByte=m_iWidth1*m_iHeight;
      519     pcInfo=new BYTE[256*sizeof(RGBQUAD)+sizeof(BITMAPINFOHEADER)+m_iMaxByte+sizeof(GIFTABLE)*4096];
      520     
      521     bitmapheader=(BITMAPINFOHEADER*)pcInfo;
      522     pcColorTable=pcInfo+sizeof(BITMAPINFOHEADER);
      523     m_pcBitmap=pcColorTable+256*sizeof(RGBQUAD);
      524     pcGifTable=(GIFTABLE*)(m_pcBitmap+m_iMaxByte);
      525     for(int i=0;i<4096;i++)
      526         pcGifTable[i].previouscode=pcGifTable[i].nextcode=0;
      527     bitmapheader->biSize=sizeof(BITMAPINFOHEADER);
      528     bitmapheader->biWidth=m_iWidth;
      529     bitmapheader->biHeight=-m_iHeight;
      530     bitmapheader->biPlanes=1;
      531     bitmapheader->biBitCount=8;
      532     bitmapheader->biCompression=BI_RGB;
      533     bitmapheader->biSizeImage=0;
      534     bitmapheader->biXPelsPerMeter=0;
      535     bitmapheader->biYPelsPerMeter=0;
      536     bitmapheader->biClrUsed=256;
      537     bitmapheader->biClrImportant=256;
      538     if(m_cPackedField&0x80)
      539     {
      540         uLocalColorTableSize=1;
      541         uLocalColorTableSize<<=(m_cPackedField&7)+1;
      542         if(m_bTransparentIndex)
      543         {
      544             m_TransparentColor=RGB(m_pcGifTrack[m_iTransparentIndex*3],m_pcGifTrack[m_iTransparentIndex*3+1],m_pcGifTrack[m_iTransparentIndex*3+2]);
      545         }
      546         m_iTotalReadByte+=uLocalColorTableSize*3;
      547         for(UINT i=0;i<uLocalColorTableSize;i++)
      548         {
      549             pcColorTable[2]=*m_pcGifTrack++;
      550             pcColorTable[1]=*m_pcGifTrack++;
      551             pcColorTable[0]=*m_pcGifTrack++;
      552             pcColorTable[3]=0;
      553             pcColorTable+=4;
      554         }
      555     }
      556     else
      557     {
      558         BYTE *pcGlobalColor=m_pcGlobalColorTable;
      559         if(m_bTransparentIndex)
      560         {
      561             m_TransparentColor=RGB(pcGlobalColor[m_iTransparentIndex*3],pcGlobalColor[m_iTransparentIndex*3+1],pcGlobalColor[m_iTransparentIndex*3+2]);
      562         }
      563         for(int i=0;i<m_iGlobalColorSize;i++)
      564         {
      565             pcColorTable[2]=*pcGlobalColor++;
      566             pcColorTable[1]=*pcGlobalColor++;
      567             pcColorTable[0]=*pcGlobalColor++;
      568             pcColorTable[3]=0;
      569             pcColorTable+=4;
      570         }
      571     }
      572     m_uPrimaryBitSize=m_uBitSize=(*m_pcGifTrack++);
      573     m_iTotalReadByte++;
      574     iPrimaryTableSize=iTableSize=(1<<m_uBitSize)+2;
      575     iFinishCode=iTableSize-1;
      576     iResetCode=iFinishCode-1;
      577     m_uPrimaryBitSize++;
      578     m_uBitSize++;
      579     m_uRemain=0;
      580     m_cCurentByte=0;
      581     m_uBlockSize=0;
      582     m_uReadByte=1;
      583     m_x=m_y=0;
      584     m_iPass=1;
      585     m_iRow=0;
      586     while((code=GetCode())!=iFinishCode)
      587     {
      588         if(code==iResetCode)
      589         {
      590             m_uBitSize=m_uPrimaryBitSize;
      591             iTableSize=iPrimaryTableSize;
      592             oldcode=GetCode();
      593             if(oldcode>iTableSize)
      594             {
      595                 delete[] pcInfo;
      596                 return 0;
      597             }
      598             Output((BYTE)oldcode);
      599             continue;
      600         }
      601         if(code<iTableSize) //<code> exist in the string pcGifTable
      602         {
      603             code1=code;
      604             WORD code2=0;
      605             while(code1>=iPrimaryTableSize)
      606             {
      607                 pcGifTable[code1].nextcode=code2;
      608                 code2=code1;
      609                 code1=pcGifTable[code1].previouscode;
      610                 if(code1>=code2)
      611                 {
      612                     delete[] pcInfo;
      613                     return 0;
      614                 }
      615             }
      616             Output((BYTE)code1);
      617             while(code2!=0)
      618             {
      619                 Output(pcGifTable[code2].bit);
      620                 code2=pcGifTable[code2].nextcode;
      621             }
      622             pcGifTable[iTableSize].bit=(BYTE)code1;
      623             pcGifTable[iTableSize].previouscode=oldcode;
      624             iTableSize++;
      625             if(iTableSize==(0x0001<<m_uBitSize))
      626                 m_uBitSize++;
      627             if(m_uBitSize>12)
      628                 m_uBitSize=12;
      629             oldcode=code;
      630         }
      631         else
      632         {
      633             code1=oldcode;
      634             WORD code2=0;
      635             while(code1>=iPrimaryTableSize)
      636             {
      637                 pcGifTable[code1].nextcode=code2;
      638                 code2=code1;
      639                 code1=pcGifTable[code1].previouscode;
      640                 if(code1>=code2)
      641                 {
      642                     delete[] pcInfo;
      643                     return 0;
      644                 }
      645             }
      646             Output((BYTE)code1);
      647             while(code2!=0)
      648             {
      649                 Output(pcGifTable[code2].bit);
      650                 code2=pcGifTable[code2].nextcode;
      651             }
      652             Output((BYTE)code1);
      653             pcGifTable[iTableSize].bit=(BYTE)code1;
      654             pcGifTable[iTableSize].previouscode=oldcode;
      655             iTableSize++;
      656             if(iTableSize==(0x0001<<m_uBitSize))
      657                 m_uBitSize++;
      658             if(m_uBitSize>12)
      659                 m_uBitSize=12;
      660             oldcode=code;
      661         }
      662     }
      663     hBitmap = DIBTohBitmap(m_hDC,(LPSTR)pcInfo);
      664     m_pcGifTrack++;
      665     m_iTotalReadByte++;
      666     delete[] pcInfo;
      667     return hBitmap;
      668 }
      669 void CGIFShow::SetPosition(int x,int y)
      670 {
      671     m_nPosX=x;
      672     m_nPosY=y;
      673 }
      674 void CGIFShow::Pause(bool status)
      675 {
      676     m_bPause=status;
      677 }
      678 HBITMAP CGIFShow::DIBTohBitmap(HDC hDC,LPSTR   lpSrcDIB)
      679  {
      680       HBITMAP   hBitmap   =   NULL;
      681       HBITMAP   hOldBmp   =   NULL;
      682       HDC   hTmpDC   =   NULL;
      683       BITMAPINFOHEADER* bitmapheader = (BITMAPINFOHEADER*)lpSrcDIB;
      684       hBitmap = CreateCompatibleBitmap(hDC,bitmapheader->biWidth,
      685           -(bitmapheader->biHeight));
      686       hTmpDC=CreateCompatibleDC(hDC);
      687       hOldBmp=(HBITMAP)SelectObject(hTmpDC,hBitmap);
      688       StretchDIBits(hTmpDC,0,0,bitmapheader->biWidth,
      689           -bitmapheader->biHeight,0,0,bitmapheader->biWidth,
      690           -bitmapheader->biHeight,lpSrcDIB+40 + 256*sizeof(RGBQUAD),(BITMAPINFO*)lpSrcDIB,
      691           DIB_RGB_COLORS,SRCCOPY);
      692       SelectObject(hTmpDC,hOldBmp);
      693       DeleteDC(hTmpDC);
      694       return   hBitmap;
      695  }
      =======================================
      3) 調(diào)用CGIFShow類示例
          (1) 定義全局變量
          CGIFShow *pGIFInst;
          
          (2) 在窗體的WM_CREATE消息處理中初始化CGIFShow類的實(shí)例
          pGIFInst = new CGIFShow(GetDC(hWnd));
          注: CGIFShow 類需要顯示在類似于窗體這樣(應(yīng)該說是具有畫布屬性)的句柄上。
              在第一次使用CGIFShow類時(shí),我想顯示在listview上,但是沒有成功
          
          (3) GIF動(dòng)畫顯示
          if(pGIFInst->Load(TEXT("waiting.gif")))
          {
              RECT rcClient;
              GetClientRect(hWnd, &rcClient);
             
              pGIFInst->SetPosition(96,130);
              pGIFInst->Play();
          }
          /*需要等待處理的調(diào)用代碼*/
          pGIFInst->Stop();
          
          (4) 最后記得清理內(nèi)存
          if(NULL != pGIFInst)
              delete pGIFInst;

       

      posted @ 2016-03-08 21:05  91program  閱讀(645)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 国色天香成人一区二区| 99久久亚洲精品无码毛片| 亚洲欧美牲交| 中文字幕结果国产精品| 中文字幕乱码人妻综合二区三区| 中文字幕亚洲无线码A| 国产精品免费视频网站| 久久精品亚洲精品国产区| 中文字幕无线码中文字幕| AV人摸人人人澡人人超碰| 日本阿v片在线播放免费| 国产美女被遭强高潮免费一视频| 深夜av免费在线观看| 精品无码一区在线观看| 成人亚洲欧美一区二区三区| 国产熟女av一区二区三区| 岛国av在线播放观看| 亚洲国产综合一区二区精品| 2021国产精品视频网站| 久久这里只精品热免费99| 男女xx00xx的视频免费观看| 国产熟女老阿姨毛片看爽爽| 丰满少妇在线观看网站| 午夜精品福利亚洲国产| 色老99久久精品偷偷鲁| 伊人久久综合无码成人网| 亚洲情A成黄在线观看动漫尤物| 18禁亚洲深夜福利人口| 亚洲欧美综合在线天堂| 人妻少妇精品中文字幕| 国产精品一码在线播放| 国产精品二区中文字幕| 国产伦精品一区二区三区妓女下载| 久久久久免费看成人影片| 精品少妇av蜜臀av| 波多野结衣av高清一区二区三区 | 亚洲午夜爱爱香蕉片| 国产成人无码性教育视频| 国产在线精品一区二区夜色| 国产成人精品亚洲高清在线| 亚洲精品一二三四区|