//////////////////////////////////////////
// SplitterTestProc.h
// Copyright (c) 01/02/2003 by BCCSkelton
//////////////////////////////////////////

/////////////////////////////////
//主ウィンドウCMyWndの関数の定義
//ウィンドウメッセージ関数
/////////////////////////////////
bool CMyWnd::OnCreate(WPARAM wParam, LPARAM lParam) {

	//コモンコントロールの初期化
	InitCommonControls();

	//ツールバー登録−Init(hWnd, hIinstance, ID, (以下省略可）Style)
	TBar.Init(m_hWnd, m_hInstance, TOOLBAR);
	//ツールバーボタン用カスタムビットマップ追加
	TBar.AddBmp(m_hInstance, MAKEINTRESOURCE(IDI_TOOLBAR), 12);
	//ツールバーボタン追加
	TBBUTTON tbb[12];
	ZeroMemory(tbb, sizeof(tbb));
	tbb[0].iBitmap = TBar.m_id + 0;
	tbb[0].fsState = TBSTATE_ENABLED;
	tbb[0].fsStyle = TBSTYLE_BUTTON;
	tbb[0].idCommand = IDM_EXIT;
	tbb[1].iBitmap = TBar.m_id + 1;
	tbb[1].fsState = TBSTATE_ENABLED;
	tbb[1].fsStyle = TBSTYLE_BUTTON;
	tbb[1].idCommand = IDM_ADDWIN0;
	tbb[2].iBitmap = TBar.m_id + 2;
	tbb[2].fsState = TBSTATE_ENABLED;
	tbb[2].fsStyle = TBSTYLE_BUTTON;
	tbb[2].idCommand = IDM_DELWIN0;
	tbb[3].iBitmap = TBar.m_id + 3;
	tbb[3].fsState = TBSTATE_ENABLED;
	tbb[3].fsStyle = TBSTYLE_BUTTON;
	tbb[3].idCommand = IDM_ADDWIN1;
	tbb[4].iBitmap = TBar.m_id + 4;
	tbb[4].fsState = TBSTATE_ENABLED;
	tbb[4].fsStyle = TBSTYLE_BUTTON;
	tbb[4].idCommand = IDM_DELWIN1;
	tbb[5].iBitmap = TBar.m_id + 5;
	tbb[5].fsState = TBSTATE_ENABLED;
	tbb[5].fsStyle = TBSTYLE_BUTTON;
	tbb[5].idCommand = IDM_ADDWIN2;
	tbb[6].iBitmap = TBar.m_id + 6;
	tbb[6].fsState = TBSTATE_ENABLED;
	tbb[6].fsStyle = TBSTYLE_BUTTON;
	tbb[6].idCommand = IDM_DELWIN2;
	tbb[7].iBitmap = TBar.m_id + 7;
	tbb[7].fsState = TBSTATE_ENABLED;
	tbb[7].fsStyle = TBSTYLE_BUTTON;
	tbb[7].idCommand = IDM_ADDWIN3;
	tbb[8].iBitmap = TBar.m_id + 8;
	tbb[8].fsState = TBSTATE_ENABLED;
	tbb[8].fsStyle = TBSTYLE_BUTTON;
	tbb[8].idCommand = IDM_DELWIN3;
	tbb[9].iBitmap = TBar.m_id + 9;
	tbb[9].fsState = TBSTATE_ENABLED;
	tbb[9].fsStyle = TBSTYLE_BUTTON;
	tbb[9].idCommand = IDM_ADDPAGE;
	tbb[10].iBitmap = TBar.m_id + 10;
	tbb[10].fsState = TBSTATE_ENABLED;
	tbb[10].fsStyle = TBSTYLE_BUTTON;
	tbb[10].idCommand = IDM_DELPAGE;
	tbb[11].iBitmap = TBar.m_id + 11;
	tbb[11].fsState = TBSTATE_ENABLED;
	tbb[11].fsStyle = TBSTYLE_BUTTON;
	tbb[11].idCommand = IDM_VERSION;
	TBar.AddButtons(12, tbb);

	//ステータスバー登録−Init(hWnd, hIinstance, ID, (以下省略可）Style)
	SBar.Init(m_hWnd, m_hInstance, STATUSBAR);
	//ステータスバー区画設定
	int sec[2] = {200, 400};
	SBar.SetSection(2, sec);
	//ステータスバー文字列設定
	SBar.SetText(0, "Splitter Test");
	SBar.SetText(1, "Ver1.0");

	//☆Splitterの作成
	g_Split.Create(m_hWnd, m_hInstance, IDC_SPLIT);

	//☆エディットコントロールの作成
	g_Edit.Init("EDIT", m_hInstance);

	//☆ツリービュー用イメージリストを作成
	g_hIList = ImageList_Create(16, 16, ILC_COLOR4 | ILC_MASK, 1, 0);
	if (hIList == NULL)
		MessageBox(NULL, "イメージリスト作成失敗", "OK", MB_OK);
	//☆ビットマップを登録
	HBITMAP hBmp = LoadBitmap(m_hInstance, MAKEINTRESOURCE(IDI_DOC));
	ImageList_AddMasked(g_hIList, hBmp, RGB(255, 255, 255));
	DeleteObject(hBmp);

	return TRUE;
}

bool CMyWnd::OnSize(WPARAM wParam, LPARAM lParam) {

	TBar.AutoSize();
	SBar.AutoSize();
	//☆ここでスプリッターを親のクライアント領域に合わせる
	g_Split.AutoSize(SBar.m_hWnd, TBar.m_hWnd);
	return TRUE;
}

bool CMyWnd::OnClose(WPARAM wParam, LPARAM lParam) {

	if(MessageBox(m_hWnd, "終了しますか", "終了確認",
					MB_YESNO | MB_ICONINFORMATION) == IDYES) {
		//処理をするとDestroyWindow、PostQuitMessageが呼ばれる
		ImageList_Destroy(g_hIList);	//ツリービューで作成したイメージリストを廃棄する
		return TRUE;
	}
	else
		//そうでなければウィンドウではDefWindowProc関数をreturn、ダイアログではreturn FALSEとなる。
		return FALSE;
}

/////////////////////////////////
//主ウィンドウCMyWndの関数の定義
//メニュー項目、コントロール関数
/////////////////////////////////
bool CMyWnd::OnExit() {

	SendMsg(WM_CLOSE, 0, 0);
	return TRUE;
}

bool CMyWnd::OnAddwin0() {

	//☆ウィンドウ0にツリービューを作成
	g_Ctrl[0].Init("SYSTREEVIEW32", m_hInstance);
	g_Ctrl[0].Create("", WS_CHILD | WS_VISIBLE | WS_BORDER | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | TVS_SHOWSELALWAYS, WS_EX_CLIENTEDGE, m_hWnd, IDC_CTRL0, 0, 0, 0, 0);
	g_Split.SetCtrl(0, IDC_CTRL0);
	//☆ツリービューにイメージリストを登録
	TreeView_SetImageList(g_Ctrl[0].m_hWnd, hIList, TVSIL_NORMAL);
	int w = 200, h = 250;
	g_Split.SetBorders(w, h, h);
	return TRUE;
}

bool CMyWnd::OnDelwin0() {

	//☆ウィンドウ0を削除
	g_Split.DeleteCtrl(0);
	return TRUE;
}

bool CMyWnd::OnAddwin1() {

	//☆ウィンドウ１にタブコントロールを作成
	g_Split.SetTab(1, IDC_TAB);
	return TRUE;
}

bool CMyWnd::OnDelwin1() {

	//☆ウィンドウ1を削除
	g_Split.DeleteTab(1);
	return TRUE;
}

bool CMyWnd::OnAddwin2() {

	//☆ウィンドウ2にスタティックコントロールを登録
	g_Ctrl[1].Init("STATIC", m_hInstance);
	g_Ctrl[1].Create("", WS_CHILD | WS_VISIBLE | SS_NOTIFY | SS_ICON | SS_SUNKEN, WS_EX_CLIENTEDGE, m_hWnd, IDC_CTRL1, 0, 0, 0, 0);
	g_Ctrl[1].SendMsg(STM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)LoadIcon(m_hInstance, MAKEINTRESOURCE(IDI_ICON)));
	g_Split.SetCtrl(2, IDC_CTRL1);
	int w = 150, h = 150;
	g_Split.SetBorders(w, g_Split.m_ClientHeight - h, g_Split.m_ClientHeight - h);
	return TRUE;
}

bool CMyWnd::OnDelwin2() {

	//☆ウィンドウ2を削除
	g_Split.DeleteCtrl(2);
	return TRUE;
}

bool CMyWnd::OnAddwin3() {

	//☆ウィンドウ3にエディットコントロールを登録
	g_Ctrl[2].Init("EDIT", m_hInstance);
	g_Ctrl[2].Create("", WS_CHILD | WS_VISIBLE | WS_BORDER | WS_HSCROLL | WS_VSCROLL | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_MULTILINE | ES_READONLY, WS_EX_CLIENTEDGE, m_hWnd, IDC_CTRL2, 0, 0, 0, 0);
	g_Split.SetCtrl(3, IDC_CTRL2);
	return TRUE;
}

bool CMyWnd::OnDelwin3() {

	//☆ウィンドウ3を削除
	g_Split.DeleteCtrl(3);
	return TRUE;
}

bool CMyWnd::OnAddpage() {

	//☆ファイルを開くダイアログ
	char* FileName = cmndlg.GetFileName(m_hWnd, "全てのファイル(*.*)\0*.*\0\0", TRUE);
	//☆ファイル名分解用CARGオブジェクト
	CARG arg;
	arg = arg.GetLongName(FileName);
	//☆ウィンドウ1が存在していればページを追加する
	if(g_Split.GetCtrl(1)) {
		CSTR file;
		file.FromFile(FileName);
		g_Edit.Create(file.ToChar(), WS_CHILD | WS_VISIBLE | WS_BORDER | WS_HSCROLL | WS_VSCROLL |
							ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_MULTILINE,
							WS_EX_CLIENTEDGE, g_Split.m_hWnd, IDC_EDIT + g_Pointer,
							0, 0, 0, 0);
		g_Split.GetTab(1)->AddPage(IDC_EDIT + g_Pointer, IDI_DOC, arg.FileName());
		g_Pointer++;
		//☆TV_INSERTSTRUCT構造体変数の宣言
		TV_INSERTSTRUCT tv;
		ZeroMemory(&tv, sizeof(tv));
		tv.hInsertAfter = TVI_LAST;
		tv.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
		tv.hParent = TVI_ROOT;
		tv.item.pszText = FileName;
		tv.item.iImage = 0;
		tv.item.iSelectedImage = 0;
		TreeView_InsertItem(g_Ctrl[0].m_hWnd, &tv);	//ツリービューアイテムハンドルの記録
		//☆g_Ctrl[2]に表示
		if(g_Ctrl[2].m_hWnd) {
			CSTR str = FileName;
			str = str + "を読み込みました。";
			g_Ctrl[2].SendMsg(WM_SETTEXT, 0, (LPARAM)str.ToChar());
		}
	}
	return TRUE;
}

bool CMyWnd::OnDelpage() {

	//☆Tabのタイトル（ファイル名）を取得
	char FileName[MAX_PATH];
	lstrcpy(FileName, g_Split.GetTab(1)->GetTitle());
	//☆ウィンドウ1が存在していればページを削除する
	if(g_Split.GetCtrl(1)) {
		g_Split.GetTab(1)->DeletePage();
		//☆ツリービューアイテムも削除
		HTREEITEM hTree;							//ツリービューのハンドル
		TV_ITEM tvitem;
		char Buff[MAX_PATH];
		hTree = TreeView_GetRoot(g_Ctrl[0].m_hWnd);	//ルートを取る
		while(hTree) {
			//☆選択されているアイテムの文字列を取得し、これでフィルターを作成
			tvitem.hItem = hTree;
			tvitem.mask = TVIF_TEXT;
			tvitem.pszText = Buff;
			tvitem.cchTextMax = MAX_PATH;
			TreeView_GetItem(g_Ctrl[0].m_hWnd, &tvitem);
			if(strstr(Buff, FileName)) {
				TreeView_DeleteItem(g_Ctrl[0].m_hWnd, hTree);
				break;
			}
			hTree = TreeView_GetNextSibling(g_Ctrl[0].m_hWnd, hTree);
		}
		//☆g_Ctrl[2]に表示
		if(g_Ctrl[2].m_hWnd) {
			CSTR str = FileName;
			str = str + "を削除しました。";
			g_Ctrl[2].SendMsg(WM_SETTEXT, 0, (LPARAM)str.ToChar());
		}
	}
	return TRUE;
}

bool CMyWnd::OnVersion() {

	CSTR str =	"BCCSkeltonに新しい仲間が増えました。スプリッターです。\r\n"
				"スプリッターには、主分割が縦のCVSPRITクラスと、主分割が横のCHSPLITクラスがあります。\r\n"
				"どちらも使用方法は同じですので、お好みに合わせて選んでください。\r\n\r\n"
				"【ご注意】\r\n"
				"１）使用方法詳細はBCCSkeltonのマニュアルとCV/HSPLIT.hをお読みください。\r\n"
				"２）ウィンドウ番号は左上=0、右上=1、左下=2、右下=3になってます。\r\n"
				"３）ウィンドウは先ず0を設定してください。下、右にウィンドウがないと親のクライアントエリア内で自動的に最大化されます。\r\n"
				"４）更にウィンドウ0から見て主分割線の相手方が何もない場合は主分割線は下、右に張り付きます。（マニュアルで移動可）\r\n"
				"５）サイズを変更したときには下、右の副ウィンドウのサイズは変わらず、上、左のウィンドウサイズを変更します。\r\n\r\n"
				"本プログラムで動作をよく確認してください。";
	MessageBox(m_hWnd, str.ToChar(), "SplitterTestのバージョン情報", MB_OK | MB_ICONINFORMATION);
	return TRUE;
}

///////////////////////////////
//ユーザーダイアログの関数定義
//コントロール関数
///////////////////////////////
