/*-----------------------------------------------------------------------------
[名称]	CategoryTreeView.h
[概要]	カテゴリツリービューのヘッダ
[備考]	なし
[履歴]	2003-03-18	NC		新規作成(moralog)
-----------------------------------------------------------------------------*/
#if !defined(AFX_CATEGORYTREEVIEW_H_INCLUDED_)
#define AFX_CATEGORYTREEVIEW_H_INCLUDED_

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


//-----------------------------------------------------------------------------
// インクルード
//-----------------------------------------------------------------------------
#include "TreeViewEx.h"
#include <afxole.h>


/*-----------------------------------------------------------------------------
[名称]	カテゴリツリービュー
[用途]	カテゴリをツリー表示するビュー。
[備考]	http://www5.wisnet.ne.jp/~mercury/program/windows/lib/treeviewex.html
		http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_TVdrag.html
-----------------------------------------------------------------------------*/
class CCategoryTreeView : public CTreeViewEx
{
protected:
	CCategoryTreeView();           // 動的生成に使用されるプロテクト コンストラクタ
	DECLARE_DYNCREATE(CCategoryTreeView)

// アトリビュート
public:

// オペレーション
public:
	// 表示内容更新
	void ReflectView();

	// アイテムのコピーハンドラ
	virtual	BOOL OnCopyItem(
			HTREEITEM	hSrcNode,
			HTREEITEM	hNewParent,
			HTREEITEM	hAfter
	);

	// アイテムのコピーハンドラ
	virtual BOOL OnCopiedItem(
		HTREEITEM	hNewNode,
		HTREEITEM	hSrcNode,
		HTREEITEM	hNewParent,
		HTREEITEM	hAfter
	);

	// UI操作を元データに反映するか？
	BOOL	IsUIReflect(){ return(m_bUIReflect); };
	void	SetUIReflect( BOOL bUIReflect ){ m_bUIReflect = bUIReflect; };

// オーバーライド
	// ClassWizard は仮想関数のオーバーライドを生成します。

	//{{AFX_VIRTUAL(CCategoryTreeView)
	public:
	virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
	virtual DROPEFFECT OnDragEnter(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
	virtual DROPEFFECT OnDragOver(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
	virtual BOOL OnDrop(COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point);
	protected:
	virtual void OnDraw(CDC* pDC);      // このビューを描画するためにオーバーライドしました。
	//}}AFX_VIRTUAL

// インプリメンテーション
protected:
	virtual ~CCategoryTreeView();
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif


private:
	CImageList	m_imageList;		// ツリー内アイコン用イメージりスト [-] (-)
									//	0	閉じたフォルダ
									//	1	開いたフォルダ
									//	2	アイテム

	COleDropTarget	m_DropTarget;	// ドロップ対象オブジェクト [-] (-)

	BOOL		m_bUIReflect;		// UI操作を元データに反映するか？ [-] (TRUE:する、FALSE:しない)


	// 生成されたメッセージ マップ関数
protected:
	//{{AFX_MSG(CCategoryTreeView)
	afx_msg void OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult);
	afx_msg void OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult);
	afx_msg void OnDeleteitem(NMHDR* pNMHDR, LRESULT* pResult);
	afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
	afx_msg void OnTreeAddnode();
	afx_msg void OnTreeDeletenode();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////

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

#endif // !defined(AFX_CATEGORYTREEVIEW_H_INCLUDED_)
