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

class CFONT
{
public:	//メンバー変数
	HFONT	m_hFont = 0;				//フォントハンドル
    int		m_FontSize = 8;				//フォントサイズ
	WCHAR	m_FontName[32]  = {L"\0"};	//フォント名
	LOGFONT	m_LogFont;					//フォント情報

public:		//メンバー関数
	CFONT();							//コンストラクター
	CFONT(HWND, int, WCHAR*);			//引数付コンストラクター
	~CFONT();							//デコンストラクター
	HFONT GetFont() {return m_hFont;}	//設定されているフォントを返す
	void SetFont(HWND, int, WCHAR*);	//ウィンドウへのフォント設定
	LPLOGFONT GetInfo();				//現在の選択フォントの詳細情報
};

//コンストラクター（純粋な初期化）
CFONT::CFONT() {

}

//コンストラクター（引数付）
CFONT::CFONT(HWND hWnd, int Size, WCHAR* FName) {

	SetFont(hWnd, Size, FName);
}

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

	DeleteObject(m_hFont);
}

//フォントの設定
void CFONT::SetFont(HWND hWnd, int Size, WCHAR* FName) {

	//既にフォント設定がされていれば初期化する
	if(m_hFont)	DeleteObject(m_hFont);
	m_FontSize = Size;
	lstrcpynW(m_FontName, FName, 32);
	HDC hDC = GetDC(hWnd);		//フォームとコントロールのフォントをm_FontSizeに設定
	m_hFont = CreateFontW(MulDiv(m_FontSize, GetDeviceCaps(hDC, LOGPIXELSY), -72),
					    0,						// 0なら、高さにあった幅
						0,						// スクリーンの表示画面とＸ軸の角度の１０倍
						0,						// 各文字の角度
						FW_REGULAR,				// 太さ
						FALSE,					// イタリック
						FALSE,					// 下線
						FALSE,					// 抹消線
						SHIFTJIS_CHARSET,		// 書体設定
						OUT_DEFAULT_PRECIS,		// プリント文字と指定文字の近似精度
						CLIP_DEFAULT_PRECIS,	// 文字がクリッピング領域をはずれたときの精度
						PROOF_QUALITY,			// 出力品質
						FIXED_PITCH | FF_ROMAN,	// 文字の間隔
						m_FontName				// 書体の名称
			);
	SendMessageW(hWnd, WM_SETFONT, (WPARAM)m_hFont, TRUE);
	ReleaseDC(hWnd, hDC);
}

//現在の選択フォントの詳細情報
LPLOGFONT CFONT::GetInfo() {

	if(GetObject((HGDIOBJ)m_hFont, sizeof(LOGFONT), &m_LogFont))
		return &m_LogFont;
	else
		return 0;
}
