//////////////////////////////////////////
// Resizer.h
// Copyright (c) 03/27/2022 by BCCSkelton
//////////////////////////////////////////
//BCCSkeltonのヘッダー−これに必要なヘッダーが入っている
#include	"BCCSkelton.h"
//リソースIDのヘッダー
#include	"ResResizer.h"
//ワイド文字使用の為"wchar.h"をインクルード
#include <wchar.h>
//GDI+のインクルード、ネームスペースの使用
#include	<gdiplus.h>
using namespace Gdiplus;
//イメージファイルのフィルター
#define		IMGFILTER	"イメージファイル\0*.bmp;*.jpeg;*.jpg;*.gif;*.tiff;*.png;*.wmf;*.emf;*.ico\0\0"
//エンコーダーリスト
const WCHAR* g_EncoderList[5] = {L"image/bmp", L"image/jpeg", L"image/gif", L"image/tiff", L"image/png"};

/////////////////////////////////////////////////////////////////////
//CRESIZERクラスをCDLGクラスから派生させ、メッセージ用の関数を宣言する
/////////////////////////////////////////////////////////////////////
class CRESIZER : public CDLG
{
public:	//以下はコールバック関数マクロと関連している
	//////////////
	//メンバー変数
	//////////////
	//２重起動防止用のMutex用ID名称
	CRESIZER(char* UName) : CDLG(UName) {}
	//GDI+用変数
	GdiplusStartupInput m_gdiSI;	//GDI+のスタートアップインプット
	ULONG_PTR m_gdiToken;			//GDI+のトークン
	HDC m_hDC;						//メインダイアログのデバイスコンテキスト
	Image* m_pImage = 0;			//Imageクラスオブジェクトポインター
	//イメージファイル処理用変数
	int m_Max;						//大きい方の一辺の値
	CSTR m_SrcPath;					//ソースファイルパス
	CSTR m_DstPath;					//ディスティネーションファイルパス
	int m_NoOfFiles = 0;			//イメージファイル処理数
	int m_Noc = 0;					//縮小コピー処理数

	//リストビューコントロール
	CLISTVIEW m_ListView;
	//////////////
	//メンバー関数
	//////////////
	//メニュー項目、ダイアログコントロール関連
	bool OnSelsrc();
	bool OnOverwrite();
	bool OnSeldist();
	bool OnIdgo();
	bool OnIdok();
	bool OnIdcancel();
	//ウィンドウメッセージ関連
	bool OnInit(WPARAM, LPARAM);
	bool OnClose(WPARAM, LPARAM);
	//ユーザー定義関数
	bool ReadAlbum();
	bool SetFileNames(char*);
	bool IsDigitStr(char*);
	bool CopyImages(int, bool);
	int GetEncoderClsid(const WCHAR*, CLSID*);
};

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

BEGIN_MODALDLGMSG(ModalProc, Resizer)
	//メニュー項目、ダイアログコントロール関連
	ON_COMMAND(Resizer, IDC_SELSRC, OnSelsrc())
	ON_COMMAND(Resizer, IDC_OVERWRITE, OnOverwrite())
	ON_COMMAND(Resizer, IDC_SELDIST, OnSeldist())
	ON_COMMAND(Resizer, IDC_GO, OnIdgo())
	ON_COMMAND(Resizer, IDOK, OnIdok())
	ON_COMMAND(Resizer, IDCANCEL, OnIdcancel())
	//ウィンドウメッセージ関連
	//自動的にダイアログ作成時にOnInit()、終了時にOnClose()を呼びます
END_DLGMSG

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

///////////////////////
//CEXTCHKのインスタンス
///////////////////////
CEXTCHK g_ExtChk;
