//////////////////////////////////////////
// RTEditor.h
// Copyright (c) 06/23/2002 by BCCSkelton
//////////////////////////////////////////
//BCCSkeltonのヘッダー−これに必要なヘッダーが入っている
#include	"BCCSkelton.h"
//リソースIDのヘッダー
#include	"ResRTEditor.h"
//リッチテキストコントロール用
#define	IDC_CHILD_CONTROL	1

/////////////////////////////////////
//リッチエディットコントロールの作成
/////////////////////////////////////
//☆リッチエディットコントロールの定義がここにあるのは、メッセージテーブルに認識させるためです
CREDIT Edit;

/////////////////////////////////////////////////////////////////////
//CMyWndクラスをCMDIクラスから派生させ、メッセージ用の関数を宣言する
/////////////////////////////////////////////////////////////////////
class CMyWnd : public CMDI
{

public:	//以下はコールバック関数マクロと関連している
	//２重起動防止用のMutex用ID名称
	CMyWnd(char* UName) : CMDI(UName) {}
	//メニュー項目、ダイアログコントロール関連
	bool OnNew();
	bool OnOpen();
	bool OnSave(HWND);
	bool OnSaveas(HWND);
	bool OnSetprint();
	bool OnPrint(HWND);
	bool OnExit();
	bool OnUndo(HWND);
	bool OnCut(HWND);
	bool OnCopy(HWND);
	bool OnPaste(HWND);
	bool OnSelall(HWND);
	bool OnFind(HWND);
	bool OnReplace(HWND);
	bool OnFont(HWND);
	bool OnLeft(HWND);
	bool OnCenter(HWND);
	bool OnRight(HWND);
	bool OnLindent(HWND);
	bool OnLoutdent(HWND);
	bool OnRindent(HWND);
	bool OnRoutdent(HWND);
	bool OnTilehorz();
	bool OnTilevert();
	bool OnCascade();
	bool OnArrange();
	bool OnBrief();
	bool OnShortCut();
	bool OnVer();
	//ウィンドウメッセージ関連
	bool OnMDIFrameCreate(WPARAM, LPARAM);
	bool OnMDIChildCreate(WPARAM, LPARAM);
	bool OnMDIActivate(WPARAM, LPARAM);
	bool OnSetFocus(WPARAM, LPARAM);
	bool OnFindReplace(LPARAM);
	bool OnMDIFrameSize(WPARAM, LPARAM);
	bool OnMDIChildSize(WPARAM, LPARAM);
	bool OnNotify(WPARAM, LPARAM);
	bool OnChildClose(HWND);
	bool OnClose(WPARAM, LPARAM);
	bool OnDropFiles(WPARAM);
};

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

BEGIN_MDIMSG(RTEditor)	//ダイアログと違い、コールバック関数名を特定しない
	//メニュー項目、ダイアログコントロール関連
	ON_COMMAND(RTEditor, IDM_NEW, OnNew())
	ON_COMMAND(RTEditor, IDM_OPEN, OnOpen())
	ON_COMMAND(RTEditor, IDM_SETPRINT, OnSetprint())
	ON_COMMAND(RTEditor, IDM_EXIT, OnExit())
	ON_COMMAND(RTEditor, IDM_CASCADE, OnCascade())
	ON_COMMAND(RTEditor, IDM_TILEHORZ, OnTilehorz())
	ON_COMMAND(RTEditor, IDM_TILEVERT, OnTilevert())
	ON_COMMAND(RTEditor, IDM_ARRANGE, OnArrange())
	ON_COMMAND(RTEditor, IDM_BRIEF, OnBrief())
	ON_COMMAND(RTEditor, IDM_SHORTCUT, OnShortCut())
	ON_COMMAND(RTEditor, IDM_VER, OnVer())
	//ウィンドウメッセージ関連
	//MDIFrame親ウィンドウは自動的にOnMDIFrameCreate()を呼ぶ
	ON_MDIFRAMESIZE(RTEditor)
	ON_NOTIFY(RTEditor)
	ON_CLOSE(RTEditor)
	ON_(RTEditor, WM_DROPFILES, OnDropFiles(wParam))
END_MDIMSG(RTEditor)

//ウィンドウメッセージは全てフレームウィンドウにあるので、
//必要なメッセージ関数を子供ウィンドウへ移すことが必要
//☆以下の関数の殆どは親から移動したものです。処理によってどこに置くべきか考えます。
//☆MDI子メッセージテーブル内では、m_FocusedChildメンバー変数に子のhWndが入ります
BEGIN_MDICHILDMSG(RTEditor)	//ダイアログと違い、コールバック関数名を特定しない
	ON_COMMAND(RTEditor, IDM_SAVE, OnSave(hWnd))
	ON_COMMAND(RTEditor, IDM_SAVEAS, OnSaveas(hWnd))
	ON_COMMAND(RTEditor, IDM_PRINT, OnPrint(hWnd))
	ON_COMMAND(RTEditor, IDM_UNDO, OnUndo(hWnd))
	ON_COMMAND(RTEditor, IDM_CUT, OnCut(hWnd))
	ON_COMMAND(RTEditor, IDM_COPY, OnCopy(hWnd))
	ON_COMMAND(RTEditor, IDM_PASTE, OnPaste(hWnd))
	ON_COMMAND(RTEditor, IDM_SELALL, OnSelall(hWnd))
	ON_COMMAND(RTEditor, IDM_FIND, OnFind(hWnd))
	ON_COMMAND(RTEditor, IDM_REPLACE, OnReplace(hWnd))
	ON_COMMAND(RTEditor, IDM_FONT, OnFont(hWnd))
	ON_COMMAND(RTEditor, IDM_LEFT, OnLeft(hWnd))
	ON_COMMAND(RTEditor, IDM_CENTER, OnCenter(hWnd))
	ON_COMMAND(RTEditor, IDM_RIGHT, OnRight(hWnd))
	ON_COMMAND(RTEditor, IDM_LINDENT, OnLindent(hWnd))
	ON_COMMAND(RTEditor, IDM_LOUTDENT, OnLoutdent(hWnd))
	ON_COMMAND(RTEditor, IDM_RINDENT, OnRindent(hWnd))
	ON_COMMAND(RTEditor, IDM_ROUTDENT, OnRoutdent(hWnd))
	//MDIChild子ウィンドウは自動的にOnMDIChildCreate()を呼ぶ
	ON_SETFOCUS(RTEditor)
	ON_NOTIFY(RTEditor)
	ON_(RTEditor, WM_CLOSE, OnChildClose(hWnd))
	//☆重要！CREDITクラスは文字列検索･置換用にユーザーメッセージを作るので、
	//  このような処理を行います。CREDITファイルを覗いてください。
	ON_(RTEditor, Edit.m_frMsg, OnFindReplace(lParam))
	ON_MDICHILDSIZE(RTEditor)
END_MDICHILDMSG

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

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

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

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

////////////////////////////////////
//CARGクラスとファイル付き起動フラグ
////////////////////////////////////
CARG arg;
bool ByFile = FALSE;

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

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

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