///////////////////////////////////////
// ECCSkelton
// コントロールクラスCCTRL定義ファイル
// Copyright (c) August, 2022
//        By Ysama
///////////////////////////////////////

class CCTRL : public CWND
{
public:
	CFONT m_hFont;							//コントロール全体のフォント情報
public:		//メンバー関数
	bool Assign(LPWSTR, HWND, HMENU);		//既存コントロール付与関数
	bool Init(LPWSTR, HINSTANCE, LPWSTR,
				LPWSTR, LPWSTR, HBRUSH);	//コントロール作成のための初期化関数
	bool Create(LPWSTR, DWORD, DWORD, HWND, HMENU,
				int, int, int, int);		//コントロール作成関数
	void SetInstance(HINSTANCE hInst)
					{m_hInstance = hInst;}	//インスタンスを設定
	virtual void SetFont(int, WCHAR*);		//フォント設定(直接指定）
};

//既存コントロール付与関数
bool CCTRL::Assign(LPWSTR ClassName, HWND hParent, HMENU hMenu) {

	m_lpClassName = ClassName;										//このコントロールクラスのウィンドウクラス
	m_hParent = hParent;											//このコントロールの親のハンドル
	m_hMenu = (HMENU)hMenu;											//このコントロールのID
	m_hWnd = GetDlgItem(m_hParent, (int)m_hMenu);					//このコントロールのウィンドウハンドル
	m_hInstance = (HINSTANCE)GetWindowLongW(m_hWnd, GWL_HINSTANCE);	//このコントロールのインスタンス
	m_dwStyle = GetWindowLongW(m_hWnd, GWL_STYLE);
	m_dwExStyle = GetWindowLongW(m_hWnd, GWL_EXSTYLE);
	return TRUE;
}

//コントロール作成のための初期化関数
//（ウィンドウクラス登録は行わないが、CWNDの純粋仮想関数充足の為に引数を合わせる）
bool CCTRL::Init(LPWSTR ClassName, HINSTANCE hInstance,
				LPWSTR Menu = L"\0",
				LPWSTR Icon = L"\0", LPWSTR cur = L"\0",
				HBRUSH brush = (HBRUSH)0) {

	m_lpClassName = ClassName;		//このコントロールクラスのウィンドウクラス
	m_hInstance = hInstance;		//このコントロールのインスタンス
	return TRUE;
}

//コントロール作成関数
bool CCTRL::Create(LPWSTR WindowName, DWORD Style, DWORD ExStyle,
				HWND hParent, HMENU hMenu,
				int x = CW_USEDEFAULT, int y = CW_USEDEFAULT,
				int w = CW_USEDEFAULT, int h = CW_USEDEFAULT) {

	m_hWnd = CreateWindowExW(m_dwExStyle = ExStyle,
					    	m_lpClassName,
							m_lpWindowName = WindowName,
							m_dwStyle = Style,
							m_x = x,
							m_y = y,
							m_Width = w,
							m_Height = h,
							m_hParent = hParent,
							m_hMenu = hMenu,
							m_hInstance,
							m_lpParam
	);
	if(m_hWnd == NULL) {
		MessageBoxW(0, L"コントロールを作れませんでした!", L"エラー",
				MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL);
		return FALSE;
	}
	//コントロールの表示と再描画
	ShowWindow(m_hWnd, SW_SHOWNORMAL);
	UpdateWindow(m_hWnd);
	return TRUE;
}

//------------------------
// フォント設定(直接指定）
//------------------------
void CCTRL::SetFont(int size, WCHAR* FontName) {

	m_hFont.SetFont(m_hWnd, size, FontName);
}
