Map Editor の Object Class

Map Editor を作成する MAPEDIT Object Class の説明です。

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

MAPEDIT Object Class の領域

  1. MAPEDIT Object Class のヘッダファイル(MAPEDIT.H) です。
    // SPI ENTRY は GIF 画像を入力する為の Ifgif.spi の ENTRY ADDRESS の定義です。
    詳細は GIF 画像を表示する を参照して下さい。
    今回は他の Class を継承しないで全てのメンバー関数を直接定義してみました。
    hBmp,hBmpDC は Mapchip の画像を表示する HDC で、hMBmp,hMBmpDC は透明色を設定する HDC です。
    hSpi は ifgif.spi の INSTANCE です。
    hBackBmp,hBackDC はチラツキを抑えて描画する為の BackBuffer の定義です。
    Width,Height は Mapchip 画像の幅と高さで szFile[] が画像ファイルの名前です。
    Xnum,Ynum は背景画像を構成する横と縦のセルの個数です。
    SWidth,SHeight は一個の Sprite(セル)の幅と高さです。
    SnumX,SnumY は Mapchip 画像の横方向と縦方向のセルの枚数で、画像サイズを SWidth,SHeight で割った値です。
        /*★ MAPEDIT Object Header File  2006-02-05  前田 稔 ★*/
        #ifndef _MapEdit
        #define _MapEdit
        #define  SAFE_DELDC(p)   { if (p) { DeleteDC (p);   (p)=NULL; } }
        #define  SAFE_DELOBJ(p)  { if (p) { DeleteObject(p); (p)=NULL; } }
    
        // SPI ENTRY
        typedef int (PASCAL *GetPluginInfo)(int,LPSTR,int);
        typedef int (PASCAL *IsSupported)(LPSTR,DWORD);
        typedef int (PASCAL *GetPictureInfo)(LPSTR,long,UINT,struct PictureInfo*);
        typedef int (PASCAL *GetPicture)(LPSTR,long,UINT,HANDLE*,HANDLE*,FARPROC,long);
        typedef int (PASCAL *GetPreview)(LPSTR,long,UINT,HANDLE*,HANDLE*,FARPROC,long);
    
        class MAPEDIT
        { protected:
            HWND        hWnd;
            HBITMAP     hBmp;               //画像の HBITMAP
            HDC         hBmpDC;             //画像の HDC
            HBITMAP     hMBmp;              //マスクの HBITMAP
            HDC         hMBmpDC;            //マスクの HDC
            HINSTANCE   hSpi;
    
          public:
            HBITMAP     hBackBmp;           //Back Buffer の HBITMAP
            HDC         hBackDC;            //Back Buffer の HDC
            long        Width;              //画像の幅
            long        Height;             //画像の高さ
            char        szFile[MAX_PATH];   //オープンするファイル名(パス付き)
            long        Xnum,Ynum;          //Map に並べる横と縦のセル数
            long        SWidth;             //Sprite の幅
            long        SHeight;            //Sprite の高さ
            long        SnumX;              //Sprite の横方向の枚数
            long        SnumY;              //Sprite の縦方向の枚数
        


Object Class のメンバー関数

  1. MAPEDIT Object Class のヘッダファイル(MAPEDIT.H) の続きです。
          protected:
            void        GetSpi();
            void        CreateBuf(long width, long height);
            HPALETTE    DIBtoPAL(HANDLE hBInfo);
            void        CreateBack();
    
          public:
            MAPEDIT(HWND hWnd);             //Constructor
            virtual ~MAPEDIT();             //Destructor
            HRESULT     LoadFile(LPSTR ImageName);
            HRESULT     LoadGif(LPSTR ImageName);
            HRESULT     LoadBmp(LPSTR szBitmap);
    
            HRESULT     Show(BOOL msk, HDC hdc, long x, long y, long w, long h, long xd, long yd);
            HRESULT     Show(BOOL msk, HDC hdc, long x, long y)
                        {  return Show(msk,hdc,x,y,Width,Height,0,0);  }
    
            HRESULT     Show(HDC hdc)
                        {  return Show(FALSE,hdc,0,0,Width,Height,0,0);  }
            HRESULT     Show(HDC hdc, long x, long y)
                        {  return Show(FALSE,hdc,x,y,Width,Height,0,0);  }
            HRESULT     Show(HDC hdc, long x, long y, long w, long h, long xd, long yd)
                        {  return Show(FALSE,hdc,x,y,w,h,xd,yd);  }
            HRESULT     Show(HDC hdc, long n, long x, long y);
    
            HRESULT     View(HDC hdc, int t[500][500], int xp, int yp);
            void        Line(HDC hdc, int xnum, int ynum);
            void        BoxLine(HDC hdc, RECT *rct, HPEN hPen);
            HRESULT     SetSize(long WSIZ, long HSIZ);
            BOOL        OpenMapFile();
            BOOL        OpenReadFile(char File[], LPSTR s1, LPSTR s2);
            BOOL        OpenWriteFile(char File[], LPSTR s1, LPSTR s2);
            void        Clear(HWND hwnd, HBRUSH brush);
            void        Blt(HWND hwnd);
        };
        
  2. GetSpi(); は GIF 画像を入力する Ifgif.spi の ENTRY ADDRESS を設定します。
    詳細は GIF 画像を表示する を参照して下さい。
  3. CreateBuf(); は GIF 画像を格納するサーフェースを作成する関数です。
    DIBtoPAL(); はパレットを作成する関数です。
  4. CreateBack(); は画像のチラツキを抑えるために BackBuffer を作成する関数です。
  5. MAPEDIT(); と ~MAPEDIT(); は Constructor と Destructor です。
  6. LoadFile(); は画像を入力する関数で、拡張子により LoadGif(); と LoadBmp(); を使い分けます。
  7. Show(); 関数は画像を描画する関数です。
    詳細は カードイメージを入力して、一枚のカードを表示する などを参照して下さい。
  8. View(); 関数は一枚のレイヤを描画する関数です。
  9. Line(); は罫線を描画する関数です。
  10. BoxLine(); は矩形を描画する関数です。
  11. SetSize(); はSprite(セル)のサイズを設定する関数です。
  12. OpenMapFile(); は Mapchip ファイルを一覧から選択して LoadFile(); で入力する関数です。
  13. OpenReadFile(); と OpenWriteFile(); はシステムの保存とオープンを行う関数です。
  14. Clar() はウインドウを brush でクリアする関数です。
  15. Blt(); は BackBuffer を表画面に描画する関数です。

[Next Chapter ↓] Map Editor の Main Program
[Previous Chapter ↑] mae Map Editor の開発

超初心者のプログラム入門(Win32API C++)