//////////////////////////////////////////
// DirectShow.h
// Copyright (c) 01/31/2022 by BCCSkelton
//////////////////////////////////////////
//BCCSkeltonのヘッダー−これに必要なヘッダーが入っている
#include	"BCCSkelton.h"
//リソースIDのヘッダー
#include	"ResDirectShow.h"
//CDSHOWのヘッダー
#include	"CDSHOW.h"
//ShellAPIヘッダー(PathFileExist関数の為)
#include	"shlwapi.h"
//再生用スライダーコントロール関連
#include	"CSLIDER.h"
#define		IDC_SLIDER	1000
//FileList.dllの静的ロード
#include	"DLL.h"
#pragma comment(lib, ".\\Debug\\FileList.lib") 
IMPORT char* GetFileList(char*, char*, char*, char*);

/////////////////////////////////////////////////////////////////////
//CMyWndクラスをCSDIクラスから派生させ、メッセージ用の関数を宣言する
/////////////////////////////////////////////////////////////////////
class CMyWnd : public CSDI
{
public:	//以下はコールバック関数マクロと関連している
	//２重起動防止用のMutex用ID名称
	CMyWnd(char* UName) : CSDI(UName) {}
	//OnAutoPlay用プレイリスト変数
	CSTR m_FileList;
	//メニュー項目、ダイアログコントロール関連
	bool OnOpen();
	bool OnUrl();
	bool OnExit();
	bool OnShow();
	bool OnPause();
	bool OnStop();
	bool OnMakelist();
	bool OnAutoPlay();
	bool OnPlayList();
	bool OnAbout();
	bool OnVersion();
	//ウィンドウメッセージ関連
	bool OnCreate(WPARAM, LPARAM);
	bool OnTimer(WPARAM, LPARAM);
	bool OnLButtonDown(WPARAM, LPARAM);
	bool OnRButtonDown(WPARAM, LPARAM);
	bool OnNotify(WPARAM, LPARAM);
	bool OnSize(WPARAM, LPARAM);
	bool OnClose(WPARAM, LPARAM);
	bool OnMinMax(WPARAM, LPARAM);
	bool OnGraphNotify(WPARAM, LPARAM);		//DirectShow空の通知処理
	bool OnDropFiles(WPARAM);
	//ユーザー定義関数
	void WhenComplete();
	void ChangeMenuStatus(int);
	void AllowtoOpen(bool);
	void AutoPlay(bool, bool);
	char* GetTimeStr(int);
};

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

BEGIN_SDIMSG(DirectShow)	//ダイアログと違い、コールバック関数名を特定しない
	//メニュー項目、ダイアログコントロール関連
	ON_COMMAND(DirectShow, IDM_OPEN, OnOpen())
	ON_COMMAND(DirectShow, IDM_URL, OnUrl())
	ON_COMMAND(DirectShow, IDM_EXIT, OnExit())
	ON_COMMAND(DirectShow, IDM_SHOW, OnShow())
	ON_COMMAND(DirectShow, IDM_PAUSE, OnPause())
	ON_COMMAND(DirectShow, IDM_STOP, OnStop())
	ON_COMMAND(DirectShow, IDM_MAKELIST, OnMakelist())
	ON_COMMAND(DirectShow, IDM_AUTOPLAY, OnAutoPlay())
	ON_COMMAND(DirectShow, IDM_PLAYLIST, OnPlayList())
	ON_COMMAND(DirectShow, IDM_ABOUT, OnAbout())
	ON_COMMAND(DirectShow, IDM_VERSION, OnVersion())
	//ウィンドウメッセージ関連
	ON_CREATE(DirectShow)
	ON_TIMER(DirectShow)
	ON_LBUTTONDOWN(DirectShow)
	ON_RBUTTONDOWN(DirectShow)
	ON_NOTIFY(DirectShow)
	ON_SIZE(DirectShow)
	ON_CLOSE(DirectShow)
	ON_(DirectShow, WM_GETMINMAXINFO, OnMinMax(wParam, lParam))
	ON_(DirectShow, WM_GRAPHNOTIFY, OnGraphNotify(wParam, lParam))	//DirectShow通知
	ON_(DirectShow, WM_DROPFILES, OnDropFiles(wParam))
END_WNDMSG

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

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

/////////////////////////////////
//CTIMERクラスインスタンスの作成
/////////////////////////////////
CTIMER g_tmr;

///////////////////////
//CDSHOWクラス関連変数
///////////////////////
CDSHOW g_dshow;			//CDSHOWインスタンス
int g_Mtm;				//メディアファイルの再生時間（REFTIME→unsigned int）

//////////////////////////////
//再生用スライダーコントロール
//////////////////////////////
CSLIDER g_Slider;

////////////////////////
//CARGクラスインスタンス
////////////////////////
CARG arg;
bool g_ByFile = FALSE;

//////////////////
//拡張子チェック
//////////////////
CEXTCHK g_ExtChk;

////////////////////////
//ヘルプファイルパス、名
////////////////////////
CSTR g_HelpFile;

/////////////////////
//ファイルリストパス
/////////////////////
CSTR g_FileListDir;

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

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

BEGIN_MODALDLGMSG(urldlgProc, urldlg)	//第1引数がコールバック関数の名前
	ON_COMMAND(urldlg, IDOK, OnIdok())
	ON_COMMAND(urldlg, IDCANCEL, OnCancel())
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
