///////////////////////////////////////
// BCCSkelton
// ツールチップクラスCTTIP定義ファイル
// Copyright (c) August, 2022
//        By Ysama
///////////////////////////////////////

class CTTIP
{
public:
	HWND m_hTip;								//ツールチップのウィンドウハンドル
	HWND m_hParent;								//親のウィンドウハンドル
	HWND m_hCtrl;								//コントロールのウィンドウハンドル
	HINSTANCE m_hInstance;						//親のインスタンス
	TOOLINFO m_ToolInfo;						//TOOLINFO構造体
	CFONT m_hFont;								//ツールチップのフォント
public:		//メンバー関数
	bool SetToolTip(HWND, int, char*, bool);	//ツールチップの付与
	void UpdateText(char*);					//ツールチップ文字列の更新
	void SetWidth(int);							//ツールチップ最大幅設定
	void SetBackColor(UINT);					//ツールチップ背景色設定
	void SetTextColor(UINT);					//ツールチップ背景色設定
	void SetFont(int, char*);					//フォント設定(直接指定）
};

//ツールチップの付与
bool CTTIP::SetToolTip(HWND hWnd, int CtrlID, char* pszText, bool baloon = FALSE) {

	//セットするコントロールの親、IDまたは文字列がNULLの場合エラー扱いとする
	if(!CtrlID || !(m_hParent = hWnd) || !*pszText)
		return FALSE;
	//バルーン型にするか否か
	DWORD style;
	if(baloon)
		style = WS_POPUP | TTS_ALWAYSTIP | TTS_BALLOON;
	else
		style = WS_POPUP | TTS_ALWAYSTIP;
	//対象コントロールのハンドルを取得する
	m_hCtrl = GetDlgItem(m_hParent, CtrlID);
	//文字列リソースのある親ウィンドウ（ダイアログ）のインスタンス
	m_hInstance = (HINSTANCE)GetWindowLong(m_hParent, GWL_HINSTANCE);
	//ツールチップの作成
	m_hTip = CreateWindowEx(NULL, TOOLTIPS_CLASS, NULL, style,
				CW_USEDEFAULT, CW_USEDEFAULT,
				CW_USEDEFAULT, CW_USEDEFAULT,
				m_hParent, NULL, m_hInstance, NULL);
	//ツールチップ作成失敗エラー
	if(!m_hCtrl || !m_hTip)
		return FALSE;
	//ツールチップをコントロールに関連付ける
	ZeroMemory(&m_ToolInfo, sizeof(m_ToolInfo));	//ゼロクリアー
	m_ToolInfo.cbSize = sizeof(m_ToolInfo);
	m_ToolInfo.hwnd = m_hParent;
	m_ToolInfo.uFlags = TTF_IDISHWND | TTF_SUBCLASS;
	m_ToolInfo.uId = (UINT_PTR)m_hCtrl;
	m_ToolInfo.hinst = m_hInstance;
	m_ToolInfo.lpszText = pszText;
	SendMessage(m_hTip, TTM_ADDTOOL, 0, (LPARAM)&m_ToolInfo);
	SetWindowPos(m_hTip, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
	return TRUE;
}

//ツールチップ文字列の更新
void CTTIP::UpdateText(char* pszText) {

	//TOOLINFOの準備
	ZeroMemory(&m_ToolInfo, sizeof(m_ToolInfo));	//ゼロクリアー
	m_ToolInfo.cbSize = sizeof(m_ToolInfo);
	m_ToolInfo.hwnd = m_hParent;
	m_ToolInfo.uFlags = TTF_IDISHWND | TTF_SUBCLASS;
	m_ToolInfo.uId = (UINT_PTR)m_hCtrl;
	m_ToolInfo.hinst = m_hInstance;
	m_ToolInfo.lpszText = pszText;
	SendMessage(m_hTip, TTM_UPDATETIPTEXT, 0, (LPARAM)&m_ToolInfo);
}

//ツールチップ最大幅設定
void CTTIP::SetWidth(int size) {	//任意の幅を許可する場合は size == -1

	SendMessage(m_hTip, TTM_SETMAXTIPWIDTH, 0, (LPARAM)size);
}

//ツールチップ背景色設定
void CTTIP::SetBackColor(UINT col) {	//任意の幅を許可する場合は size == -1

	SendMessage(m_hTip, TTM_SETTIPBKCOLOR, col, 0);
}

//ツールチップ背景色設定
void CTTIP::SetTextColor(UINT col) {	//任意の幅を許可する場合は size == -1

	SendMessage(m_hTip, TTM_SETTIPTEXTCOLOR, col, 0);
}

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

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