Object Class Library

講座で説明している VC++ Windows Program を作成するための Object Class を提供します。
*.h と *.cpp をフォルダーに格納して、プロジェクトに組み込んで下さい。
DATAFILE Object Class のソースコード
IMAGE Object Class のソースコード
Backbuf Object Class のソースコード
SURFACE Object Class のソースコード
SURFACE32 Object Class のソースコード
DDS Object Class のソースコード

前田稔(Maeda Minoru)の超初心者のプログラム入門

DATAFILE Object Class

  1. DATAFILE Object Class は、ファイルの入力と出力を行う Object Class です。
  2. DATAFILE Object Class の基本的な使い方です。
    入出力は全データをまとめて一度に転送します。
        char        g_buf[100000];
        DATAFILE    DataFile;
    
        DataFile.ReadData("TEST.TXT",g_buf,100000);
        DataFile.WriteData("W.TXT",g_buf,strlen(g_buf));
        
  3. ReadData() 関数で buf を省略した場合、入力ファイルのサイズに合わせて領域がアロケートされます。
    入力された領域のポインタが char *io_buf に設定されています。
        DATAFILE    DataFile;
    
        DataFile.ReadData("TEST.TXT");
        if (_strnicmp(DataFile.io_buf,"HEAD",4)==0)  ...;
        

IMAGE Object Class

  1. IMAGE Object Class は、画像を描画する Object Class です。
    BMP 形式だけでなく、JPEG 形式や GIF 形式の画像も描画することが出来ます。
    JPEG 形式の画像を使うときは Susie で使われている DLL(ifjpeg.spi) が必要です。
    GIF 形式の画像を使うときは Susie で使われている DLL(ifgif.spi) が必要です。
    Susie は有名なソフトなので、ネットで検索すればすぐ見つかるはずです。
    DLL は c:\Windows\System32\ のフォルダーに格納して下さい。
  2. IMAGE Object Class の基本的な使い方です。
    LoadFile() では、拡張子の先頭文字(B,J,G) で画像の形式を識別します。
    既に画像がロードされているときは、古い画像を開放してから読み込んでいます。
        IMAGE           *Img= NULL;
        char            File[]= "c:\\data\\test.jpg";
    
        Img= new IMAGE(hwnd);
        Img->LoadFile(File);
        Img->Show();
        if (Img)
        {   delete(Img);
            Img= NULL;
        }
        
  3. Show() 関数は、次の形式がサポートされています。
    透明色を使うときは、黒(0,0,0)が透明色になります。
    横と縦の枚数を指定して画像をタイル状に切り出す Sprite 機能もポートします。
        //BitBlt() で描画する
        HRESULT     Show(HDC hdc,long x,long y,long w,long h,long xd,long yd);
        HRESULT     Show(long x,long y,long w,long h,long xd,long yd);
        HRESULT     Show(HDC hdc)
                    {  return Show(hdc,0,0,Width,Height,0,0);  }
        HRESULT     Show(HDC hdc,long x,long y)
                    {  return Show(hdc,x,y,Width,Height,0,0);  }
        HRESULT     Show()
                    {  return Show(0,0,Width,Height,0,0);  }
        HRESULT     Show(long x,long y)
                    {  return Show(x,y,Width,Height,0,0);  }
    
        //透明色は TransparentBlt() で描画する
        HRESULT     ShowBlack(HDC hdc,long x,long y,long w,long h,long xd,long yd);
        HRESULT     ShowBlack(long x,long y,long w,long h,long xd,long yd);
        HRESULT     ShowBlack(HDC hdc)
                    {  return ShowBlack(hdc,0,0,Width,Height,0,0);  }
        HRESULT     ShowBlack(HDC hdc,long x,long y)
                    {  return ShowBlack(hdc,x,y,Width,Height,0,0);  }
        HRESULT     ShowBlack()
                    {  return ShowBlack(0,0,Width,Height,0,0);  }
        HRESULT     ShowBlack(long x,long y)
                    {  return ShowBlack(x,y,Width,Height,0,0);  }
    
        //Sprite 番号を指定するときは、透明色を設定して TransparentBlt() で描画する
        HRESULT     Show(HDC hdc,long n,long x,long y,long w,long h,long xoff,long yoff);
        HRESULT     Show(HDC hdc,long n,long x,long y)
                    {  return Show(hdc,n,x,y,SWidth,SHeight,0,0);  }
        HRESULT     Show(long n,long x,long y,long w,long h,long xoff,long yoff);
        HRESULT     Show(long n,long x,long y)
                    {  return Show(n,x,y,SWidth,SHeight,0,0);  }
    
        //拡大/縮小は TransparentBlt() で描画する
        HRESULT     ShowSize(HDC hdc, long x, long y, float size);
        HRESULT     ShowSize(long x, long y, float size);
        HRESULT     ShowSize(HDC hdc, long n, long x, long y, float size);
        HRESULT     ShowSize(long n, long x, long y, float size);
    
        //回転は PlgBlt() で描画する
        HRESULT     ShowRot(HDC hdc, long n, long x, long y, float rt);
        HRESULT     ShowRot(long n, long x, long y, float rt);
        

Backbuf Object Class

  1. BACKBUF Object Class は、画面のチラツキを抑えるために Backbuffer を使って描画する Object Class です。
  2. BACKBUF Object Class の基本的な使い方です。
    描画するイメージは、一旦 Back->hBackDC 上に作成します。
    イメージが完成したら、Back->Blt() で一挙に FrontBuffer に転送します。
        BACKBUF     *Back= NULL;        //Back Buffer Object
    
        Back= new BACKBUF(hWnd);
        Back->Clear((HBRUSH)GetStockObject(LTGRAY_BRUSH));
        Img->Show(Back->hBackDC);
        Back->Blt();
        if (Back)
        {   delete(Back);
            Back= NULL;
        }
        

SURFACE Object Class

  1. SURFACE Object Class は、画像を Effect するための Object Class です。
  2. SURFACE Object Class の基本的な使い方です。
    SURFACE は画像をブレンドするために、hBmpDC と hWBmpDC の二枚の Surface を持っています。
        SURFACE         *Surface;               // Surface Object Class
        float           Rate= 1.0f;             // Blend のレート
     
        Surface= new SURFACE(hwnd,Img1->Width,Img1->Height);
        Img2->Show(Surface->hWBmpDC,0,0);
        Img1->Show(Surface->hBmpDC,0,0);
        Surface->Blend(Surface->Data,Surface->WData,Rate);
        BitBlt(hdc,30,20,Img1->Width,Img1->Height,Surface->hBmpDC,0,0,SRCCOPY);
        if (Surface)
        {   delete(Surface);
            Surface= NULL;
        }
        
  3. SURFACE Object Class の主なメンバー関数です。
        HRESULT         Wipe(LPBYTE data, float rate);
        HRESULT         Wipe(HDC hdc, long x, long y, float rate);
        HRESULT         Blend(LPBYTE data, LPBYTE wdata, float rate);
        HRESULT         Blend(HDC hdc, long x, long y, float rate);
        HRESULT         Alph(LPBYTE data, LPBYTE wdata, LPBYTE mask);
        HRESULT         Trans(LPBYTE data, LPBYTE wdata, void (*func)(LONG *, LONG *));
        HRESULT         Scroll3D(LPBYTE data, LPBYTE wdata, long pos, float rate, float side);
        HRESULT         Show(HDC hdc, long x, long y);
        

SURFACE32 Object Class

  1. SURFACE32 Object Class は、画像を Effect するための Object Class です。
    Surface Class では 24 bit Surface を使うのに対して 32 bit Surface を使います。
    32 bit Surface を使うと、αチャンネルを持っている画像を描画することができます。
  2. SURFACE32 Object Class の基本的な使い方です。
        SURFACE32   *Surface= NULL;                 // Surface32 Object Class
    
        Img->LoadFile(File);
        Surface= new SURFACE32(hWnd,Img->Width,Img->Height);
        Img->Show(Surface->hWBmpDC,0,0);
        BitBlt(hDC,0,0,Img->Width,Img->Height,Surface->hBmpDC,0,0,SRCCOPY);
        if (Surface)
        {   delete(Surface);
            Surface= NULL;
        }
        
  3. SURFACE32 Object Class の主なメンバー関数です。
        HRESULT         Wipe(LPBYTE data, float rate);
        HRESULT         Wipe(HDC hdc, long x, long y, float rate);
        HRESULT         Blend(LPBYTE data, LPBYTE wdata, float rate);
        HRESULT         Blend(HDC hdc, long x, long y, float rate);
        HRESULT         Alph(LPBYTE data, LPBYTE wdata, LPBYTE mask);
        HRESULT         Trans(LPBYTE data, LPBYTE wdata, void (*func)(LONG *, LONG *));
        HRESULT         Scroll3D(LPBYTE data, LPBYTE wdata, long pos, float rate, float side);
        HRESULT         Show(HDC hdc, long x, long y);
        

DDS Object Class

  1. DDS Object Class は、DirectX で使われている αチャンネル付きの DDS 形式の画像を描画します。
  2. SURFACE32 Object Class の基本的な使い方です。
        DDS             *dds;           //DDS Object Class
        char            DDSFile[]= "c:\\data\\test.dds";
    
        dds= new DDS(hWnd);
        dds->Load(DDSFile);
        dds->Mask= RGB(80,30,10);
        dds->Clear(g_hWnd,(HBRUSH)GetStockObject(LTGRAY_BRUSH));
        dds->ShowBlend(hdc,0,0,1.0F);
        if (dds)
        {   delete(dds);
            dds= NULL;
        }
        
  3. DDS Object Class の主なメンバー関数です。
        HRESULT         Load(LPSTR szFile);
        HRESULT         Show(HDC hdc, long x, long y);
        HRESULT         Show(long x, long y);
        HRESULT         ShowBlack(HDC hdc, long x, long y, WORD lim);
        HRESULT         ShowBlend(HDC hdc, long x, long y, float rate);