/////////////////////////////
// ECCSkelton
// CSLIDERクラス定義ファイル
// Copyright (c) August, 2022
//        By Ysama
/////////////////////////////

class CSLIDER : public CCTRL
{
public:
	//メンバー関数
	bool Create(HWND, int, int,
				int, int, int, DWORD);	//コントロール作成関数
	void AutoSize(int, int, int);		//親のサイズ変更に合わせて位置（0-3）を変更
	void SetSize(int, int, int, int);	//位置と大きさを変更する
	void SetRange(int, int);			//スライダーの範囲設定
	void SetPageSize(int);				//ページサイズ（マウスクリック時の移動量）設定
	void SetLineSize(int);				//ラインサイズ（矢印キーによる移動量）設定
	int  GetPosition();					//ポジションの取得
	void SetPosition(int);				//ポジションの設定
	void SetTic(int);					//目盛りサイズの設定
};

//コントロール作成関数
bool CSLIDER::Create(HWND hParent, int cID, int x, int y, int w, int h,
					DWORD Style = WS_CHILD | WS_VISIBLE | TBS_AUTOTICKS) {

	m_hWnd = CreateWindowEx(m_dwExStyle = WS_EX_TOPMOST,
					    	m_lpClassName = TRACKBAR_CLASSW,
							m_lpWindowName = L"",
							m_dwStyle = Style,
							m_x = x,
							m_y = y,
							m_Width = w,
							m_Height = h,
							m_hParent = hParent,
							m_hMenu = (HMENU)cID,
							m_hInstance = (HINSTANCE)GetWindowLong(hParent, GWL_HINSTANCE),
							m_lpParam = NULL
	);
	if(m_hWnd == NULL) {
		MessageBoxW(0, L"スライダーコントロールを作れませんでした", L"エラー",
					MB_OK | MB_ICONEXCLAMATION);
		return FALSE;
	}
	//コントロールの表示と再描画
	ShowWindow(m_hWnd, SW_SHOWNORMAL);
	UpdateWindow(m_hWnd);
	return TRUE;
}

//親のサイズ変更に合わせて位置（時計回りに0-3の隅）を変更
void CSLIDER::AutoSize(int pos, int marginx = 0, int marginy = 0) {

	RECT rec;
	GetClientRect(m_hParent, &rec);
	switch(pos) {
	case 0:		//左上隅
		m_x = marginx;
		m_y = marginy;
		break;
	case 1:		//右上隅
		m_x = (rec.right - rec.left) - m_Width - marginx;
		m_y = marginy;
		break;
	case 2:		//右下隅
		m_x = (rec.right - rec.left) - m_Width - marginx;
		m_y = (rec.bottom - rec.top) - m_Height - marginy;
		break;
	case 3:		//左下隅
		m_x = marginx;
		m_y = (rec.bottom - rec.top) - m_Height - marginy;
		break;
	default:
		return;
	}
	MoveWindow(m_hWnd, m_x, m_y, m_Width, m_Height, TRUE);
}

//位置と大きさを変更する
void CSLIDER::SetSize(int x, int y, int w, int h) {

	m_x = x;
	m_y = y;
	m_Width = w;
	m_Height = h;
//	SetWindowPos(m_hWnd, HWND_TOP, m_x, m_y, m_Width, m_Height, SWP_SHOWWINDOW);
	MoveWindow(m_hWnd, m_x, m_y, m_Width, m_Height, TRUE);
}

//スライダーの範囲設定
void CSLIDER::SetRange(int min, int max) {

	SendMessage(m_hWnd, TBM_SETRANGE, TRUE, (LPARAM)MAKELONG(min, max));
}

//ページサイズ（マウスクリック時の移動量）設定
void CSLIDER::SetPageSize(int dst) {

	SendMessageW(m_hWnd, TBM_SETPAGESIZE, 0, (LPARAM)dst);
}

//ラインサイズ（矢印キーによる移動量）設定
void CSLIDER::SetLineSize(int dst) {

	SendMessageW(m_hWnd, TBM_SETLINESIZE, 0, (LPARAM)dst);
}

//ポジションの取得
int CSLIDER::GetPosition() {

	return SendMessageW(m_hWnd, TBM_GETPOS, 0, 0);
}

//ポジションの設定
void CSLIDER::SetPosition(int pos) {

	SendMessageW(m_hWnd, TBM_SETPOS, TRUE, (LPARAM)pos);
}

//目盛りサイズの設定
void CSLIDER::SetTic(int tic) {

	//目盛りのサイズを設定 (30)
	SendMessageW(m_hWnd, TBM_SETTICFREQ, tic, 0);
}
