/*-----------------------------------------------------------------------------
[名称]	UnicodeFontListCtrl.cpp
[概要]	ユニコード文字定義リストビュークラスの実装
[備考]	なし
[履歴]	2003-03-13	NC		コメント付加(moralog)
-----------------------------------------------------------------------------*/
#if !defined(AFX_UNICODEFONTLISTCTRL_H_INCLUDED_)
#define AFX_UNICODEFONTLISTCTRL_H_INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000


//-----------------------------------------------------------------------------
// インクルード
//-----------------------------------------------------------------------------
#include "stdafx.h"
#include "shitarabian.h"
#include "UnicodeFontListCtrl.h"
#include "UnicoderDlg.h"

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


/*-----------------------------------------------------------------------------
[名称]	コンストラクタ
[機能]	インスタンスの生成。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
CUnicodeFontListCtrl::CUnicodeFontListCtrl()
{
}


/*-----------------------------------------------------------------------------
[名称]	デストラクタ
[機能]	インスタンスの破棄。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
CUnicodeFontListCtrl::~CUnicodeFontListCtrl()
{
}


BEGIN_MESSAGE_MAP(CUnicodeFontListCtrl, CListCtrl)
	//{{AFX_MSG_MAP(CUnicodeFontListCtrl)
	ON_NOTIFY_REFLECT(NM_CLICK, OnClick)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/*-----------------------------------------------------------------------------
[名称]	アイテム描画ハンドラ
[機能]	リスト行の描画。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CUnicodeFontListCtrl::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct )
{
	CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);

	// 色定義
	COLORREF	colBack = RGB(255,255,255);
	COLORREF	colFore = RGB(0,0,0);
	if( lpDrawItemStruct->itemState & ODS_SELECTED )
	{
		colBack = RGB(64,128,128);
		colFore = RGB(255,255,255);
	}
	pDC->SetTextColor( colFore );

	// 背景塗りつぶし
	pDC->FillSolidRect(
		&(lpDrawItemStruct->rcItem),
		colBack
	);

	int	iLeft = lpDrawItemStruct->rcItem.left;

	// フォント名称
	{
		CUnicodeFont&	UnicodeFont = m_aUnicodeFontz[lpDrawItemStruct->itemID];
		CFont*	pfonOld = pDC->SelectObject(
			UnicodeFont.m_Font.GetFont( pDC )
		);
		pDC->DrawText(
			UnicodeFont.m_Font.m_strFontName,
			CRect(
				iLeft+2,
				lpDrawItemStruct->rcItem.top,
				iLeft+GetColumnWidth(0),
				lpDrawItemStruct->rcItem.bottom
			),
			DT_LEFT
		);
		pfonOld = pDC->SelectObject( pfonOld );
	}
	iLeft += GetColumnWidth(0);

	// 開始コード
	{
		CString	strMes;
		char buffer[256];
		_itoa( m_aUnicodeFontz[lpDrawItemStruct->itemID].m_lStartCode, buffer, 16 );
		strMes.Format( "&&#x%s", buffer );
		pDC->DrawText(
			strMes,
			CRect(
				iLeft+2,
				lpDrawItemStruct->rcItem.top,
				iLeft+GetColumnWidth(1),
				lpDrawItemStruct->rcItem.bottom
			),
			DT_LEFT
		);
	}
	iLeft += GetColumnWidth(1);

	// 終了コード
	{
		CString	strMes;
		char buffer[256];
		_itoa( m_aUnicodeFontz[lpDrawItemStruct->itemID].m_lEndCode, buffer, 16 );
		strMes.Format( "&&#x%s", buffer );
		pDC->DrawText(
			strMes,
			CRect(
				iLeft+2,
				lpDrawItemStruct->rcItem.top,
				iLeft+GetColumnWidth(2),
				lpDrawItemStruct->rcItem.bottom
			),
			DT_LEFT
		);
	}
	iLeft += GetColumnWidth(2);

	// 枠線の描画
	CPen	pen;
	pen.CreatePen( PS_SOLID, 1, RGB(200,200,200 ) );
	CPen*	ppenOld = (CPen*)pDC->SelectObject( &pen );
	pDC->MoveTo( lpDrawItemStruct->rcItem.left, lpDrawItemStruct->rcItem.bottom-1 );
	pDC->LineTo( iLeft-1, lpDrawItemStruct->rcItem.bottom-1 );
	iLeft = 0;
	for( int idxColumn=0 ; idxColumn<3 ; idxColumn++ )
	{
		iLeft += GetColumnWidth( idxColumn );
		pDC->MoveTo( iLeft-1, lpDrawItemStruct->rcItem.top );
		pDC->LineTo( iLeft-1, lpDrawItemStruct->rcItem.bottom-1 );
	}

	pDC->SelectObject( ppenOld );
}


/*-----------------------------------------------------------------------------
[名称]	クリックハンドラ
[機能]	項目の選択が変更されたとみなして、親ウィンドウに通知する。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CUnicodeFontListCtrl::OnClick(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// warning C4100:警告の無視
	pNMHDR;

	((CUnicoderDlg*)GetParent())->VisibleControl();

	*pResult = 0;
}
