///////////////////////////////////////////////////
// ECCSkelton ウィンドウ基本クラスCWND定義ファイル
// Copyright (c) August, 2022
//        By Ysama
///////////////////////////////////////////////////

class CWND
{
public:
	//メンバー変数
	HWND		m_hWnd = 0;					//ウィンドウハンドル
	HWND		m_hParent = 0;				//親ウィンドウハンドル
	HINSTANCE	m_hInstance = 0;			//インスタンス変数
	//CreateEx用情報
	DWORD 		m_dwExStyle = 0;
	LPWSTR		m_lpClassName = L'\0';
	LPWSTR		m_lpWindowName = L'\0';
	DWORD		m_dwStyle = WS_OVERLAPPEDWINDOW;
	int			m_x = CW_USEDEFAULT;
	int			m_y = CW_USEDEFAULT;
	int			m_Width = CW_USEDEFAULT;
	int			m_Height = CW_USEDEFAULT;
	HMENU		m_hMenu = NULL;
	LPVOID		m_lpParam = 0;
public:
	//メンバー関数
	CWND();									//コンストラクター
	~CWND();								//デストラクター
	virtual bool Init(LPWSTR, HINSTANCE,
					LPWSTR,
					LPWSTR, LPWSTR,
					HBRUSH) = 0;			//ウィンドウ初期化純粋仮想関数
	virtual bool Create(LPWSTR,
					DWORD,
					DWORD,
					HWND, HMENU,
					int, int,
					int, int) = 0;			//ウィンドウ作成純粋仮想関数
	HWND GetHandle() {return m_hWnd;}		//ウィドウハンドルを返す
	void SetHandle(HWND hWnd)
						{m_hWnd = hWnd;}	//ウィンドウハンドルを設定
	HINSTANCE GetInstance()
					{return m_hInstance;}	//インスタンスを取る
	void SetInstance(HINSTANCE hInst)
					{m_hInstance = hInst;}	//インスタンスを設定
	LRESULT SendMsg(UINT, WPARAM, LPARAM);	//ウィンドウへのメッセージ
	LRESULT SendItemMsg(int, UINT,
						WPARAM, LPARAM);	//ウィンドウコントロールへのメッセージ
};

//////////////////////
// メンバー関数の実装
//////////////////////
//メインウィンドウコンストラクター
CWND::CWND() {
	//ワイド文字使用のためロケールの初期化（日本語）
	setlocale(LC_CTYPE, "JPN");
}

//デストラクター
CWND::~CWND() {
}

//コントロールへのへのメッセージ
LRESULT CWND::SendMsg(UINT Msg, WPARAM wParam, LPARAM lParam) {

	return SendMessageW(m_hWnd, Msg, wParam, lParam);
}

//ウィンドウコントロールへのへのメッセージ
LRESULT CWND::SendItemMsg(int ID, UINT Msg, WPARAM wParam, LPARAM lParam) {

	return SendDlgItemMessageW(m_hWnd, ID, Msg, wParam, lParam);
}
