//////////////////////////////////////////
// EZImage.h
// Copyright (c) 03/01/2021 by BCCSkelton
//////////////////////////////////////////
//BCCSkeltonのヘッダー−これに必要なヘッダーが入っている
#include	"BCCSkelton.h"
//CBMPEXのヘッダー−これに必要なヘッダーが入っている
#include	"CBMPEX.h"
//リソースIDのヘッダー
#include	"ResEZImage.h"

/////////////////////////////////////////////////////////////////////
//CMyWndクラスをCSDIクラスから派生させ、メッセージ用の関数を宣言する
/////////////////////////////////////////////////////////////////////
class CMyWnd : public CSDI
{
public:	//以下はコールバック関数マクロと関連している
	//２重起動防止用のMutex用ID名称
	CMyWnd(char* UName) : CSDI(UName) {}
	//変数
	HDC m_hDC;	//デバイスコンテキスト
	//メニュー項目、ダイアログコントロール関連
	bool OnNew();
	bool OnOpen();
	bool OnSave();
	bool OnSaveas();
	bool OnExit();
	bool OnUndo();
	bool OnCopy();
	bool OnPaste();
	bool OnDot();
	bool OnLine();
	bool OnBox();
	bool OnEllipse();
	bool OnBoxf();
	bool OnEllipsef();
	bool OnPaint();
	bool OnColdlg();
	bool OnGetcol();
	bool OnShiftr();
	bool OnShiftl();
	bool OnShiftu();
	bool OnShiftd();
	bool OnLandr();
	bool OnUandd();
	bool OnClipcopy();
	bool OnClippaste();
	bool OnDisplay();
	bool OnHelp();
	bool OnShortCut();
	bool OnVersion();
	bool OnDefault(WPARAM);
	//ウィンドウメッセージ関連
	bool OnCreate(WPARAM, LPARAM);
	bool OnLButtonDown(WPARAM, LPARAM);
	bool OnMouseMove(WPARAM, LPARAM);
	bool OnLButtonUp(WPARAM, LPARAM);
	bool OnRButtonDown(WPARAM, LPARAM);
	bool OnNotify(WPARAM, LPARAM);
	bool OnSize(WPARAM, LPARAM);
	bool OnPaint(WPARAM, LPARAM);
	bool OnClose(WPARAM, LPARAM);
	bool OnDropFiles(WPARAM, LPARAM);
	bool OnMinMax(WPARAM, LPARAM);
	//	ユーザー定義関数
	void DrawImage();
	bool RecordUndo();
	void CancelUndo();
};

////////////////////////////////////////////////////////////////////////
//派生させたCMyWndクラスのインスタンスとコールバック関数(マクロ）の作成
//主ウィンドウはダイアログと違い、コールバック関数は一つしか作れない
////////////////////////////////////////////////////////////////////////
CMyWnd EZImage("EZImage");	//ウィンドウクラスインスタンスの生成

BEGIN_SDIMSG(EZImage)	//ダイアログと違い、コールバック関数名を特定しない
	//メニュー項目、ダイアログコントロール関連
	ON_COMMAND(EZImage, IDM_NEW, OnNew())
	ON_COMMAND(EZImage, IDM_OPEN, OnOpen())
	ON_COMMAND(EZImage, IDM_SAVE, OnSave())
	ON_COMMAND(EZImage, IDM_SAVEAS, OnSaveas())
	ON_COMMAND(EZImage, IDM_EXIT, OnExit())
	ON_COMMAND(EZImage, IDM_UNDO, OnUndo())
	ON_COMMAND(EZImage, IDM_COPY, OnCopy())
	ON_COMMAND(EZImage, IDM_PASTE, OnPaste())
	ON_COMMAND(EZImage, IDM_DOT, OnDot())
	ON_COMMAND(EZImage, IDM_LINE, OnLine())
	ON_COMMAND(EZImage, IDM_BOX, OnBox())
	ON_COMMAND(EZImage, IDM_ELLIPSE, OnEllipse())
	ON_COMMAND(EZImage, IDM_BOXF, OnBoxf())
	ON_COMMAND(EZImage, IDM_ELLIPSEF, OnEllipsef())
	ON_COMMAND(EZImage, IDM_PAINT, OnPaint())
	ON_COMMAND(EZImage, IDM_COLDLG, OnColdlg())
	ON_COMMAND(EZImage, IDM_GETCOL, OnGetcol())
	ON_COMMAND(EZImage, IDM_SHIFTR, OnShiftr())
	ON_COMMAND(EZImage, IDM_SHIFTL, OnShiftl())
	ON_COMMAND(EZImage, IDM_SHIFTU, OnShiftu())
	ON_COMMAND(EZImage, IDM_SHIFTD, OnShiftd())
	ON_COMMAND(EZImage, IDM_LANDR, OnLandr())
	ON_COMMAND(EZImage, IDM_UANDD, OnUandd())
	ON_COMMAND(EZImage, IDM_CLIPCOPY, OnClipcopy())
	ON_COMMAND(EZImage, IDM_CLIPPASTE, OnClippaste())
	ON_COMMAND(EZImage, IDM_DISPLAY, OnDisplay())
	ON_COMMAND(EZImage, IDM_HELP, OnHelp())
	ON_COMMAND(EZImage, IDM_SHORTCUT, OnShortCut())
	ON_COMMAND(EZImage, IDM_VERSION, OnVersion())
	//特殊コマンドメッセージ処理（ファイル履歴）
	ON_(EZImage, WM_COMMAND, OnDefault(wParam))
	//ウィンドウメッセージ関連
	ON_CREATE(EZImage)
	ON_LBUTTONDOWN(EZImage)
	ON_LBUTTONUP(EZImage)
	ON_RBUTTONDOWN(EZImage)
	ON_MOUSEMOVE(EZImage)
	ON_NOTIFY(EZImage)
	ON_SIZE(EZImage)
	ON_PAINT(EZImage)
	ON_CLOSE(EZImage)
	ON_(EZImage, WM_DROPFILES, OnDropFiles(wParam, lParam))
	ON_(EZImage, WM_GETMINMAXINFO, OnMinMax(wParam, lParam))
END_WNDMSG

///////////////////
//ツールバーの作成
///////////////////
CTBAR TBar;

///////////////////////
//ステータスバーの作成
///////////////////////
CSBAR SBar;

////////////////////////
//コモンダイアログの作成
////////////////////////
CMNDLG cmndlg;

///////////////////////
//仮想ウィンドウの作成
///////////////////////
CANVAS cvs;

////////////////////////
//CARGインスタンスの作成
////////////////////////
CARG arg;

//////////////////////////////////////////
//右クリックポップアップメニューのハンドル
//////////////////////////////////////////
HMENU g_hPopup;

//////////////////////////////////////////
//履歴（CHISTORY）用
//既にCHISTORY.hで以下が定義済
//#define 	IDM_HISTORY	59900
//#define	ITEM_MAX	32
//////////////////////////////////////////
CHISTORY history;

///////////////////////////////////////////
// CDLGクラスからNEWDLGクラスを派生
// 複数の同一ダイアログ変数とダイアログも作
// れるが、一つのダイアログに一つの派生ダイ
// アログクラスを作成するのが基本
///////////////////////////////////////////
class NEWDLG : public CDLG {
public:
	bool OnInit(WPARAM, LPARAM);
	bool OnIdok();
};

////////////////////////////////////////////////////////////////////////////
// NEWDLGクラスダイアログ変数の生成とそのコールバック関数（マクロ）を定義
// 複数同一クラスのダイアログを作成することを予期してコールバック関数を明記
////////////////////////////////////////////////////////////////////////////
NEWDLG newdlg;

BEGIN_MODALDLGMSG(newdlgProc, newdlg)	//第1引数がコールバック関数の名前
	ON_COMMAND(newdlg, IDOK, OnIdok())
END_DLGMSG

///////////////////////////////////////////
// CDLGクラスからSAVEDLGクラスを派生
// 複数の同一ダイアログ変数とダイアログも作
// れるが、一つのダイアログに一つの派生ダイ
// アログクラスを作成するのが基本
///////////////////////////////////////////
class SAVEDLG : public CDLG {
public:
	//コントロール関連関数
	bool OnInit(WPARAM, LPARAM);
	bool OnRbbitmap();
	bool OnRbicon();
	bool OnRbcur();
	bool OnHotspot();
	bool OnIdok();
	//ユーザー連関数
	int GetCol();
	void SetCol(int Col);
};

////////////////////////////////////////////////////////////////////////////
// SAVEDLGクラスダイアログ変数の生成とそのコールバック関数（マクロ）を定義
// 複数同一クラスのダイアログを作成することを予期してコールバック関数を明記
////////////////////////////////////////////////////////////////////////////
SAVEDLG savedlg;

BEGIN_MODALDLGMSG(savedlgProc, savedlg)	//第1引数がコールバック関数の名前
	ON_COMMAND(savedlg, IDC_RBBITMAP, OnRbbitmap())
	ON_COMMAND(savedlg, IDC_RBICON, OnRbicon())
	ON_COMMAND(savedlg, IDC_RBCUR, OnRbcur())
	ON_COMMAND(savedlg, IDC_HOTSPOT, OnHotspot())
	ON_COMMAND(savedlg, IDOK, OnIdok())
END_DLGMSG

///////////////////////////////////////////
// CDLGクラスからHOTSPOTDLGクラスを派生
// 複数の同一ダイアログ変数とダイアログも作
// れるが、一つのダイアログに一つの派生ダイ
// アログクラスを作成するのが基本
///////////////////////////////////////////
class HOTSPOTDLG : public CDLG {
public:
	bool OnInit(WPARAM, LPARAM);
	bool OnIdok();
};

////////////////////////////////////////////////////////////////////////////
// SAVEDLGクラスダイアログ変数の生成とそのコールバック関数（マクロ）を定義
// 複数同一クラスのダイアログを作成することを予期してコールバック関数を明記
////////////////////////////////////////////////////////////////////////////
HOTSPOTDLG hotspotdlg;

BEGIN_MODALDLGMSG(hotspotdlgProc, hotspotdlg)	//第1引数がコールバック関数の名前
	ON_COMMAND(hotspotdlg, IDOK, OnIdok())
END_DLGMSG

///////////////////////////////////////////
// CDLGクラスからBMPINFODLGクラスを派生
// 複数の同一ダイアログ変数とダイアログも作
// れるが、一つのダイアログに一つの派生ダイ
// アログクラスを作成するのが基本
///////////////////////////////////////////
class BMPINFODLG : public CDLG {
public:
	bool OnInit(WPARAM, LPARAM);
	bool OnIdhelp();
	bool OnIdok();
	//ユーザー定義関数
	void EnableAllControls(bool);
	void HowtoReadBitmapInfo(char*, long, long, WORD, DWORD, DWORD, long, long, WORD);
};

////////////////////////////////////////////////////////////////////////////
// BMPINFODLGクラスダイアログ変数の生成とそのコールバック関数（マクロ）を定義
// 複数同一クラスのダイアログを作成することを予期してコールバック関数を明記
////////////////////////////////////////////////////////////////////////////
BMPINFODLG bmpinfodlg;

BEGIN_MODALDLGMSG(bmpinfodlgProc, bmpinfodlg)	//第1引数がコールバック関数の名前
	ON_COMMAND(bmpinfodlg, IDHELP, OnIdhelp())
	ON_COMMAND(bmpinfodlg, IDOK, OnIdok())
END_DLGMSG

///////////////////////////////////////////
// CDLGクラスからVERSIONDLGクラスを派生
// 複数の同一ダイアログ変数とダイアログも作
// れるが、一つのダイアログに一つの派生ダイ
// アログクラスを作成するのが基本
///////////////////////////////////////////
class VERSIONDLG : public CDLG {
public:
	bool OnIdok();
};

////////////////////////////////////////////////////////////////////////////
// VERSIONDLGクラスダイアログ変数の生成とそのコールバック関数（マクロ）を定義
// 複数同一クラスのダイアログを作成することを予期してコールバック関数を明記
////////////////////////////////////////////////////////////////////////////
VERSIONDLG versiondlg;

BEGIN_MODALDLGMSG(versiondlgProc, versiondlg)	//第1引数がコールバック関数の名前
	ON_COMMAND(versiondlg, IDOK, OnIdok())
END_DLGMSG
