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 + -
显示快捷键?