classtreenodedata.h

来自「深入浅出Visual C++入门进阶与应用实例 随书光盘 作者 何志丹」· C头文件 代码 · 共 140 行

H
140
字号
// ClassTreeNodeData.h: interface for the CClassTreeNodeData class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_CLASSTREENODEDATA_H__184F9F9A_8EF7_4C90_92E0_12A6AE075B9A__INCLUDED_)
#define AFX_CLASSTREENODEDATA_H__184F9F9A_8EF7_4C90_92E0_12A6AE075B9A__INCLUDED_

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

#include "Afxtempl.h"
#include "ArticleElement.h"

//一篇文章的相关信息
class DLL_BASEDATA_EXT_CLASS CArticleData
{
public:
	bool ExportCurArticle(CString strDirUrl,CArticleElements &artEles,bool bUseQMD = true);//导成宣传帖
	long	m_ArticleID;//文章的唯一标识
	CString	m_content;  //文章内容
	long	m_forumid;  //文章的类别
	CString	m_topic;    //文章的标题
	CString	m_FileName; //对应的文件名(生成html时会用到)
};

//分类树节点的信息
class DLL_BASEDATA_EXT_CLASS CClassTreeNodeData  
{
public:	
	CArticleData* GetArticleData(int nID);
	//判断strText是否合法
	static bool IsLegalText(CString strText,CString& strMess);
	//看strDirName是不是合法的对应文件夹名称
	static bool IsLegalDirName(CString strDirName,CString& strMess);
	//在内存及数据库中增加一个分类树节点,前几个参数是入参,最后一个参数nID是出参
	bool AddTreeNode(const CString strText, int nParentID,CString strDir,int& nID);
	//在内存及数据库中编辑一个分类树节点
	bool EditTreeNode(int nID,CString strContent,CString strDir,int nParentID);
	//从内存及数据库中删除一个分类
	bool DeleteTreeNode(int nID);
	//从数据库中读取分类及文章
	bool ReadFromDB();
	//通过分类ID得到分类信息
	CClassTreeNodeData* GetTreeNodeByID(int nID);
	CClassTreeNodeData();
	virtual ~CClassTreeNodeData();

	int m_nID ;//分类的唯一标识
	CString m_strText ; //分类标题
	CString m_strDirName; //对应文件夹名称
	CClassTreeNodeData * m_pParentNode ;  //父节点
	CArray<CClassTreeNodeData * ,CClassTreeNodeData * > m_pSubNode ;//子节点
	CArray<CArticleData*,CArticleData*> m_arContentData ;//此分类的文章

private:
	//读取分类树
	bool ReadFromClassTreeTable(CArray<CClassTreeNodeData*,CClassTreeNodeData*>& pNodeDatas);
	//读取文章
	bool ReadFromArticleTable(CArray<CArticleData *,CArticleData *>& pContentDatas);
};

//各种常驻内存数据的容器
class DLL_BASEDATA_EXT_CLASS CMainData
{
public:	
	CClassTreeNodeData	m_ClassTreeRoot;//根节点		
public:
	//取得当前节点对应的文件夹名称
	CString GetDirOfCurTreeNode();
	//判断用户在编辑分类树节点时的输入是否合法
	bool CanEditTreeNode(int nID ,CString strText, int nParentID, CString strDir, CString &strMess);
	//判断用户在增加分类树节点时的输入是否合法
	bool CanAddTreeNode(CString strText,int nParentID,CString strDir,CString& strMess);
	//将当前类文章导成html
	bool ExportFiles(CString strTemFileName,CString strDestDir,CString& strMess);
	//导出当前文章
	bool ExportCurArticle(CArticleElements &artEles);
	//导出当前类文章
	CString ExportCurClassIndex(bool bCanUserLinkWhenExprotIndex);

	//生成html格式的链接
	CString GetTextWithLink(CString strText, CString strUrl);
	//能否删除当前文章,当前为空时不能删除
	bool CanDeleteArticle();
	//编辑当前文章	
	bool EditCurArticle(CString strTopic,const CString& strContent);
	//删除当前文章	
	bool DeleteCurArticle();
	
	CClassTreeNodeData* GetTreeNodeByID(int nID);//根据分类ID得到分类信息
	bool Init();//初始化

	//增加一个分类节点
	bool AddTreeNode(const CString strText, int nParentID, CString strDir, int &nID);
	//编辑一个分类节点
	bool EditTreeNode(int nID, CString strContent, CString strDir, int nParentID);
	//删除一个分类节点
	bool DeleteTreeNode(int nID);
	//设置当前分类
	bool SetCurTreeNode(int nID);
	//得到当前文章信息
	CArticleData* GetCurArticleData();
	//得到当前分类信息
	CClassTreeNodeData* GetCurTreeNode();
	//能否移动到最后一条记录,已经是最后一条记录是不能移
	bool CanMoveLast();
	//能否移动到上篇文章	
	bool CanMovePre();	
	//能否移动到下一篇文章
	bool CanMoveNext();

	//根据文章ID,直接定位到某个文章
	bool GoArticlePageByID(int nID);
	//直接定位到此类的第nPage篇文章
	bool GoArticlePage(UINT nPage);
	//移动到最后一篇文章
	bool MoveLast();
	//移动到第一篇文章
	bool MoveFirst();
	//移动到下一篇文章
	bool MoveNext();
	//移动到前一篇文章
	bool MovePre();
	
	CMainData();
	~CMainData();
	
private:
	void ReadFromFile();//从文件中读取信息,如:最近分类、最近节点
	void WriteToFile();//将信息写过文件,如:最近分类、最近节	
	CClassTreeNodeData* m_pCurTreeNode;    //当前分类树节点
	int					m_nCurContentIndex ;//当前文章序号
	//更新每个分类最后打开的文章
	void AdjustRecentArticleAClass();
	//每个分类最近的文章,key是分类ID,value是文章的ID
	CMap<int,int,int,int>  m_mRecentArticleID ; 
};
#endif // !defined(AFX_CLASSTREENODEDATA_H__184F9F9A_8EF7_4C90_92E0_12A6AE075B9A__INCLUDED_)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?