/*-----------------------------------------------------------------------------
[名称]	UnicoderFontDlg.cpp
[概要]	ユニコード文字フォント編集ダイアログクラスの実装
[備考]	なし
[履歴]	2003-02-25	NC		コメント付加(moralog)
-----------------------------------------------------------------------------*/


//-----------------------------------------------------------------------------
// インクルード
//-----------------------------------------------------------------------------
#include "stdafx.h"
#include "shitarabian.h"
#include "UnicodeFontDlg.h"
#include "Common.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


/*-----------------------------------------------------------------------------
[名称]	コンストラクタ
[機能]	インスタンスの生成。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
CUnicodeFontDlg::CUnicodeFontDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CUnicodeFontDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CUnicodeFontDlg)
	m_strEnd = _T("");
	m_strStart = _T("");
	m_strName = _T("");
	//}}AFX_DATA_INIT
}


/*-----------------------------------------------------------------------------
[名称]	データ変換
[機能]	CDialog::DoDataExchange()のヘルプを参照。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CUnicodeFontDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CUnicodeFontDlg)
	DDX_Control(pDX, IDC_UNICODEFONT_ENDIMAGE, m_EndImage);
	DDX_Control(pDX, IDC_UNICODEFONT_STARTIMAGE, m_StartImage);
	DDX_Text(pDX, IDC_UNICODEFONT_CODEEND, m_strEnd);
	DDX_Text(pDX, IDC_UNICODEFONT_CODESTART, m_strStart);
	DDX_Text(pDX, IDC_UNICODEFONT_NAME, m_strName);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CUnicodeFontDlg, CDialog)
	//{{AFX_MSG_MAP(CUnicodeFontDlg)
	ON_BN_CLICKED(IDC_UNICODEFONT_REF, OnUnicodefontRef)
	ON_WM_PAINT()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/*-----------------------------------------------------------------------------
[名称]	OKボタンハンドラ
[機能]	データを確定する。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CUnicodeFontDlg::OnOK() 
{
	UpdateData( TRUE );
	m_UnicodeFont.m_lStartCode = ::HexToLong( m_strStart );
	m_UnicodeFont.m_lEndCode = ::HexToLong( m_strEnd );

	CDialog::OnOK();
}


/*-----------------------------------------------------------------------------
[名称]	フォント参照ボタンハンドラ
[機能]	フォントダイアログでフォントを選択する。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CUnicodeFontDlg::OnUnicodefontRef() 
{
	HDC		hdc = ::GetDC( NULL );
	CDC		DC;
	DC.Attach( hdc );
	CFontDialog		dlg( m_UnicodeFont.m_Font.GetLogFont( &DC ), CF_SCREENFONTS );
	DC.Detach();
	::ReleaseDC( NULL, hdc );

	if ( dlg.DoModal() == IDOK)
	{
		// データを設定しなおす
		m_UnicodeFont.m_Font.m_iPointSize = (dlg.GetSize())/10;
		m_UnicodeFont.m_Font.m_strFontName = dlg.GetFaceName();
		m_UnicodeFont.m_Font.m_bBold = dlg.IsBold();
		m_UnicodeFont.m_Font.m_bItalic = dlg.IsItalic();
		m_UnicodeFont.m_Font.m_bUnderLine = dlg.IsUnderline();
		m_UnicodeFont.m_Font.m_bStrikeOut = dlg.IsStrikeOut();

		LOGFONT		tLogFont;
		dlg.GetCurrentFont( &tLogFont );
		m_UnicodeFont.m_Font.m_nCharSet = tLogFont.lfCharSet;

		m_strName = m_UnicodeFont.m_Font.m_strFontName;
		UpdateData( FALSE );
	}

	RedrawWindow();
	PostMessage( WM_PAINT );
}


/*-----------------------------------------------------------------------------
[名称]	初期化ハンドラ
[機能]	初期値の設定。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
BOOL CUnicodeFontDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();

	m_strName = m_UnicodeFont.m_Font.m_strFontName;
	m_strStart.Format( "%x", m_UnicodeFont.m_lStartCode );
	m_strEnd.Format( "%x", m_UnicodeFont.m_lEndCode );
	UpdateData( FALSE );

	return TRUE;  // コントロールにフォーカスを設定しないとき、戻り値は TRUE となります
	              // 例外: OCX プロパティ ページの戻り値は FALSE となります
}


/*-----------------------------------------------------------------------------
[名称]	描画ハンドラ
[機能]	設定されている情報でサンプルを描画する。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CUnicodeFontDlg::OnPaint() 
{
	CPaintDC dc(this); // 描画用のデバイス コンテキスト

	CFont*	pfonOld = dc.SelectObject( m_UnicodeFont.m_Font.GetFont(&dc) );
	dc.SetBkMode( OPAQUE );
	dc.SetBkColor( RGB(255,255,255 ) );
	// 文字の描画
	{
		wchar_t tmp = (wchar_t)m_UnicodeFont.m_lStartCode;
		CRect	rc;
		m_StartImage.GetWindowRect( &rc );
		CPoint	pt( rc.left, rc.top );
		ScreenToClient( &pt );
		rc.right = rc.Width();
		rc.bottom = rc.Height();
		rc.left = pt.x;
		rc.top = pt.y;
		rc.right += pt.x;
		rc.bottom += pt.y;
		::DrawTextW(
			dc.m_hDC,
			&tmp,
			1,
			&rc,
			DT_LEFT
		);
	}
	{
		wchar_t tmp = (wchar_t)m_UnicodeFont.m_lEndCode;
		CRect	rc;
		m_EndImage.GetWindowRect( &rc );
		CPoint	pt( rc.left, rc.top );
		ScreenToClient( &pt );
		rc.right = rc.Width();
		rc.bottom = rc.Height();
		rc.left = pt.x;
		rc.top = pt.y;
		rc.right += pt.x;
		rc.bottom += pt.y;
		::DrawTextW(
			dc.m_hDC,
			&tmp,
			1,
			&rc,
			DT_LEFT
		);
	}
	dc.SelectObject( pfonOld );
	
	// 描画用メッセージとして CDialog::OnPaint() を呼び出してはいけません
}
