#pragma once

#include "SkinUI.h"
#include "ISkinControl.h"

class SKINUI_CLASS CSkinEdit : public CEdit,public ISkinControl
{
	DECLARE_DYNAMIC(CSkinEdit)
	
	//资源定义
protected:
	CImageEx 						* m_pBackImgN;			//正常资源
	CImageEx 						* m_pBackImgH;			//高亮资源
	CImageEx 						* m_pIconImg;			//图标资源

	BOOL m_bFocus, m_bPress, m_bHover, m_bMouseTracking;	//状态变量
	int								m_nIconWidth;			//图标宽度
	bool							m_bHandCursor;			//手型鼠标
	CString							m_strDefText;			//默认文本
	BOOL							m_bIsDefText;			//默认状态
	TCHAR							m_cPwdChar;				//密码字符
	CPoint							m_ptClient;				//客户区
	HBRUSH							m_hBrush;
public:
	CSkinEdit();
	virtual ~CSkinEdit();

	//资源加载
public:
	//正常背景
	BOOL SetBackNormalImage(LPCTSTR lpszFileName, CONST LPRECT lpNinePart = NULL);
	//高亮背景
	BOOL SetBackHotImage(LPCTSTR lpszFileName,CONST LPRECT lpNinePart = NULL);
	//图标资源
	BOOL SetIconImage(LPCTSTR lpszFileName,bool bHandCursor = false);

	//设置函数
public:
	//默认文本
	void SetDefaultText(LPCTSTR lpszText);
	//默认模式
	void SetDefaultTextMode(BOOL bIsDefText);
	//图标位置
	void GetIconRect( RECT &lprcIcon );
	//客户区起始坐标
	void SetClientPoint(CPoint pt);

	//重载函数
public:
	//创建窗口
	virtual BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);
	//设置属性
	virtual void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue);
	//设置属性
	virtual void ParseItem(CXmlNode *root);
	//创建控件
	virtual BOOL CreateControl(CWnd* pParentWnd);

	//消息映射
public:
	//计算大小
	afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp);
	//重绘非客户区
	afx_msg void OnNcPaint();
	//重绘背景
	afx_msg BOOL OnEraseBkgnd(CDC* pDC);
	//左键按下
	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
	//左键抬起
	afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
	//鼠标移动
	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
	//鼠标离开
	afx_msg LRESULT OnMouseLeave(WPARAM wparam, LPARAM lparam);
	//控件销毁
	afx_msg void OnDestroy();
	//获取焦点
	afx_msg void OnSetFocus(CWnd* pOldWnd);
	//失去焦点
	afx_msg void OnKillFocus(CWnd* pNewWnd);
	//鼠标样式
	afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
	//颜色反映射
	afx_msg HBRUSH CtlColor(CDC* /*pDC*/, UINT /*nCtlColor*/);
	//点击测试
	afx_msg LRESULT OnNcHitTest(CPoint point);
	//非客户区左键抬起
	afx_msg void OnNcLButtonUp(UINT nHitTest, CPoint point);

protected:
	DECLARE_MESSAGE_MAP()
};



//////////////////////////////////////////////////////////////////////////
class SKINUI_CLASS CMultiSkinEdit : public CSkinEdit 
{
	DECLARE_DYNAMIC(CMultiSkinEdit)

public:
	CMultiSkinEdit(){}
	virtual ~CMultiSkinEdit(){}

	//重载函数
public:
	//创建控件
	virtual BOOL CreateControl(CWnd* pParentWnd);

protected:
	DECLARE_MESSAGE_MAP()
};