/*-----------------------------------------------------------------------------
[名称]	CharPaletteCanvasDlg.h
[概要]	文字パレットタブ内ページクラスのヘッダ
[備考]	なし
[履歴]	2003-04-22	NC		コメント付加(moralog)
-----------------------------------------------------------------------------*/
#if !defined(AFX_CHARPALETTECANVASDLG_H_INCLUDED_)
#define AFX_CHARPALETTECANVASDLG_H_INCLUDED_

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


//-----------------------------------------------------------------------------
// インクルード・不完全定義
//-----------------------------------------------------------------------------
#include <afxtempl.h>
#include "ExeStruct.h"
class	CCharPaletteDlg;


/*-----------------------------------------------------------------------------
[名称]	文字パレットタブ内ページ
[用途]	文字パレットタブ内ページにまつわる操作。
[備考]	文字パレットのタブ１枚分に当たる。
		CCharPaletteDefineに管理される。
-----------------------------------------------------------------------------*/
class CCharPaletteCanvasDlg : public CDialog
{
// コンストラクション
public:
	// 生成
	CCharPaletteCanvasDlg(CWnd* pParent = NULL);   // 標準のコンストラクタ

	// データのアタッチ
	void Attach( CCharPaletteDlg* pParent ){ m_pParent = pParent; };
	void Attach( long idxTab ){ m_idxTab = idxTab; };

	// 文字列取得
	CStringArray*	GetCharz();

	// パレット描画
	void Redraw();

// 再配置
	// コントロール再配置反映
	void RePositionControl();

	// ボタンサイズ変更
	void SetButtonSize( CSize sizeButton );

	// スクロールバー再配置
	void SetScrollBarAlign( EScrollBarAlign eAlign );

// ダイアログ データ
	//{{AFX_DATA(CCharPaletteCanvasDlg)
	enum { IDD = IDD_CHARPALETTE_CANVAS };
	CEdit	m_editChar;
	CButton		m_Canvas;
	CScrollBar	m_VScroll;
	CScrollBar	m_HScroll;
	//}}AFX_DATA

// オーバーライド
	// ClassWizard は仮想関数のオーバーライドを生成します。
	//{{AFX_VIRTUAL(CCharPaletteCanvasDlg)
	public:
	virtual BOOL PreTranslateMessage(MSG* pMsg);
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV サポート
	//}}AFX_VIRTUAL

// インプリメンテーション
protected:
	CSize				m_sizeButton;			// ボタン大きさ [pixel] (-)
	long				m_idxTab;				// 自ページタブ番号 [-] (-)
	long				m_nColumn;				// カラム数 [-] (-)
	long				m_nRow;					// 行数 [-] (-)
	BOOL				m_bEdit;				// 編集中フラグ [-] (TRUE:編集中、FALSE:選択中)
	long				m_idxCellSelect;		// アクティブセル [-] (-)
	CCharPaletteDlg*	m_pParent;				// 親ダイアログ [-] (-)
	EScrollBarAlign		m_eScrollBarAlign;		// スクロールバー配置情報 [-] (-)

	// セル描画
	BOOL DrawCell(
		long	idxRow,
		long	idxColumn
	);

	// ダイアログサイズ変更反映
	void ReflectSize( int cx, int cy );

// 位置計算
	// セル座標取得
	CRect CellToRect( long idxCell );

	// セル位置取得
	void CellIndexToRowColumn(
		long	idxChar,
		long*	pidxRow,
		long*	pidxColumn
	);

	// セル番号取得
	long RowColumnToCellIndex(
		long	idxRow,
		long	idxColumn
	);

	// セル番号取得
	long PointToCell(
		CPoint		ptCursor,
		long*		pRow,
		long*		pColumn
	);

	// 生成されたメッセージ マップ関数
	//{{AFX_MSG(CCharPaletteCanvasDlg)
	virtual BOOL OnInitDialog();
	afx_msg void OnSize(UINT nType, int cx, int cy);
	afx_msg void OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct);
	afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
	afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
	afx_msg void OnCharpaletteInsertcell();
	afx_msg void OnCharpaletteEditcell();
	afx_msg void OnCharpaletteDeletecell();
	afx_msg void OnKillfocusCharpaletteedit();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ は前行の直前に追加の宣言を挿入します。

#endif // !defined(AFX_CHARPALETTECANVASDLG_H_INCLUDED_)
