Files
envi-code/SourceCode/Code2026/tg_shs/shs_annotate/InsTextDlg.h
T
2026-09-28 15:28:50 +08:00

577 lines
19 KiB
C++

#if !defined(AFX_INSTEXTDLG_H__FA6B9462_8FCD_432C_9C0E_3663CF9EC4F1__INCLUDED_)
#define AFX_INSTEXTDLG_H__FA6B9462_8FCD_432C_9C0E_3663CF9EC4F1__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// InsTextDlg.h : header file
#include "resource.h"
#include "afxwin.h"
#include "afxcmn.h"
#include <deque>
#include <map>
#include "XMLDomNode.h"
#include "XMLDomNodes.h"
#include "XMLDomFile.h"
#include "EdJigEx.h"
//////////////////////
#define TARCH_TEXTLIB_MSG_NEW WM_USER+100
#define TARCH_TEXTLIB_MSG_INSERT WM_USER+101
#define TARCH_TEXTLIB_MSG_RENAME WM_USER+102
#define TARCH_TEXTLIB_MSG_DELETE WM_USER+103
///////////////////////////////////////
//命名字符串
class CNameString:public CString
{
public:
CString m_sContent;//详细内容
public:
CNameString(const TCHAR*s=NULL):CString(s){}//ok
void Split(CString &szName,CString &szContent0,CString& szContent1,CString&szContent2,CString&szContent3)
{
szName=*this;
UString swContent(m_sContent),swContent0,swContent1,swContent2,swContent3;
if(swContent.Length()<=125)
swContent0=swContent;
else
{
swContent0=swContent.Left(125);
if(swContent.Length()<=250)
swContent1=swContent.Right(swContent.Length()-125);
else
{
swContent1=swContent.Mid(125,249);
if(swContent.Length()<=375)
swContent2=swContent.Right(swContent.Length()-250);
else
{
swContent2=swContent.Mid(250,374);
swContent3=swContent.Right(swContent.Length()-375);
}
}
}
/*if(swContent.GetLength()<=125)
swContent0=swContent;
else
{
swContent0=swContent.Left(125);
if(swContent.GetLength()<=250)
swContent1=swContent.Right(swContent.GetLength()-125);
else
{
swContent1=swContent.Mid(125,125);
if(swContent.GetLength()<=375)
swContent2=swContent.Right(swContent.GetLength()-250);
else
{
swContent2=swContent.Mid(250,125);
swContent3=swContent.Right(swContent.GetLength()-375);
}
}
}*/
USES_CONVERSION;
szContent0=W2A(swContent0);
szContent1=W2A(swContent1);
szContent2=W2A(swContent2);
szContent3=W2A(swContent3);
}
CString GetContent()const{return m_sContent==""?*this:m_sContent;}//ok
};
// CListBoxItemData
class CListBoxItemData
{
public:
PDList<CNameString> lstNames;
bool m_bAutoDel;//全部目录是指针引用,不自动删除
public:
CListBoxItemData(bool bAD=true):m_bAutoDel(bAD){}//ok
virtual ~CListBoxItemData(){Clear();}
void Clear()
{
if(m_bAutoDel)
lstNames.Clear();
else
{
DualList<CNameString*> temp;
temp.Conbine(lstNames);
}
}
};
//////////////////////////////////////////////////
// CEditForListBox
class CEditForListBox : public CEdit
{
public:
CListBoxItemData *m_pItemData;
public:
CEditForListBox();
virtual ~CEditForListBox();
virtual void PostNcDestroy();
virtual BOOL PreTranslateMessage(MSG *pMsg);
void SetExtentData(CListBoxItemData *&pItemData);
afx_msg void OnKillFocus(CWnd* pNewWnd);
DECLARE_MESSAGE_MAP()
};
///////////////////////////////////////
// CExtendListBox
class CExtendListBox : public CDragListBox
{
DECLARE_DYNAMIC(CExtendListBox)
public:
CExtendListBox(int iFlag = 0);
virtual ~CExtendListBox();
public:
CListBoxItemData* GetBoxData(){return m_pItemData;}//ok
virtual void PreSubclassWindow();
virtual void Dropped(int nSrcIndex,CPoint pt);
void DoDeleteItem();
void DoInsertItem();
void DoAppendItem();
void DoModifyItem();
BOOL GetModify();
void SetModify(BOOL bModified = TRUE);
void SetExtendData(CListBoxItemData *&pItemData);
int SetCurSel(int nSelect);
CNameString* FindNameString(CString szName);
CNameString* CreateNameString();
void CreateEdit();
CString CreateNewName();
protected:
int m_iFlag;
BOOL m_bModified;
CListBoxItemData *m_pItemData;
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnMenuCommand(UINT id);
virtual BOOL OnChildNotify(UINT, WPARAM, LPARAM, LRESULT*);
DECLARE_MESSAGE_MAP()
};
//////////////////////////////////////////////////////////////
//得到一个xml文档中节点的各种数据
CXMLNodeInfo GetNodeInfo(const CXMLDOMNodePtr &pXmlNode,CXMLDOMFile *pXMLDoc);
CXMLNodeInfo GetNodeInfoEx(const CXMLDOMNodePtr &pXmlNode,CXMLDOMFile *pXMLDoc);
//打开xml文档
BOOL OPenXmlDoc(CXMLDOMFile&xmlDoc);
//////////////////////////////////////////////////////////////
///////////////////////////////////////
//用于 新词库 的edit控件 主要是改了存储的数据
class CArtchTextLibEdit : public CEdit
{
public:
CXMLNodeInfo *m_pItemData;// 一个叶子节点的数据
public:
CArtchTextLibEdit();
CArtchTextLibEdit(CXMLDOMFile* pXMLDoc);
virtual ~CArtchTextLibEdit();
virtual void PostNcDestroy();
virtual BOOL PreTranslateMessage(MSG *pMsg);
void SetExtentData(CXMLNodeInfo *&pItemData);
afx_msg void OnKillFocus(CWnd* pNewWnd);
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg void OnEnChange(NMHDR* p, LRESULT* l);
DECLARE_MESSAGE_MAP()
void SetXMLDoc(CXMLDOMFile*pXMLDoc);//设置xml指针
CXMLDOMFile* m_pXMLDoc;//xml文档指针 全部指向 dlg定义的那个
};
/////////////////////新词库listBox/////////////////////////////
///////////////主要更改了每行存储的扩展数据///////////////
class CArchTextLibListBox : public CDragListBox
{
DECLARE_DYNAMIC(CArchTextLibListBox)
public:
CArchTextLibListBox(int iFlag = 0);
virtual ~CArchTextLibListBox();
public:
virtual void PreSubclassWindow();
// virtual void Dropped(int nSrcIndex,CPoint pt);
void DoDeleteItem();//删除当前条目
void DoInsertItem();//插入新条目
void DoAppendItem();//添加新条目
void DoModifyItem();//修改当前条目
BOOL GetModify();//得到该控件是否可修改
void SetModify(BOOL bModified = TRUE);//设置该控件是否可修改
void SetExtendData(CListBoxItemData *&pItemData);//此函数已弃用
int SetCurSel(int nSelect);//设置当前选项
void SetXMLDoc(CXMLDOMFile*pXMLDoc);//设置xml文档指针
void CreateEdit();//创建新编辑框
CString CreateNewName();//创建词条
int AddStringEx(LPCTSTR lpszItem,CXMLNodeInfo *pData);//添加新条目 有扩展数据
int DeleteStringEx(UINT nIndex);//删除条目及扩展数据
int InsertStringEx(int nIndex,CXMLNodeInfo *pData);//插入条目及扩展数据
void ReSetContentEx()//删除所有条目及扩展数据
{
for(long i=0;i<this->GetCount();i++)
{
CXMLNodeInfo *pData = (CXMLNodeInfo*)GetItemData(i);
if (pData)
{
delete pData;
}
}
ResetContent();
}
protected:
int m_iFlag;
BOOL m_bModified;//是否循序修改
CXMLDOMFile* m_pXMLDoc;//xml文档指针
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);//快捷键
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);//右键菜单
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);//左键拖拽
afx_msg void OnMenuCommand(UINT id);//菜单命令
virtual BOOL OnChildNotify(UINT, WPARAM, LPARAM, LRESULT*);
DECLARE_MESSAGE_MAP()
};
///////////////////////////////////////////////////////////////////////
///////词库tree
class CArchTextLibTreeCtrl : public CTreeCtrl
{
public:
CArchTextLibTreeCtrl();
CArchTextLibTreeCtrl(CXMLDOMFile*pXMLDoc);
//插入新节点及扩展数据
HTREEITEM InsertItemEx(CXMLNodeInfo *pNodeInfo, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST);
//删除新节点及扩展数据
void DeleteItemEx(HTREEITEM hItem);
//删除指定节点的子节点及其扩展数据
void DeleteChildItemEx(HTREEITEM hItem);
virtual BOOL PreTranslateMessage(MSG* pMsg);
//展开所有节点
void ExpandAll();
//收拢所有节点
void CollapseAll();
//设置xml文档指针
void SetXMLDoc(CXMLDOMFile*pXMLDoc);
//删除所有节点扩展数据
void DeleteAllItemData(HTREEITEM hItem = TVI_ROOT);
protected:
//复制节点
HTREEITEM CopyItem(HTREEITEM hItem, HTREEITEM htiNewParent, HTREEITEM htiAfter);
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);//右键菜单
afx_msg void OnDestroy(){DeleteAllItemData();CTreeCtrl::OnDestroy();}//ok
afx_msg void OnMenuCommand(UINT id);//菜单命令
afx_msg void OnTvnEndlabeledit(NMHDR *pNMHDR, LRESULT *pResult);//节点名字修改
afx_msg void OnTvnBeginlabeledit(NMHDR *pNMHDR, LRESULT *pResult);//节点名字修改
afx_msg void OnTvnBegindrag(NMHDR *pNMHDR, LRESULT *pResult);//拖拽节点
// Zyu modify on 100726,支持64位
//afx_msg void OnTimer(UINT nIDEvent);//定时器
afx_msg void OnTimer(UINT_PTR nIDEvent);//定时器
afx_msg void OnMouseMove(UINT nFlags, CPoint point);//鼠标移动
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);//拖拽节点起始
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);//拖拽节点终止
DECLARE_MESSAGE_MAP()
void DoAddChildCollect();//添加子节点
void DoDeLeteItem();//删除节点
void DoAddLemma();// 添加条目
void DoReNameNode();//重命名
void DoCollapseCollect();//收拢节点
void DoExpandCollect();//展开节点
void DoExpandWorks();//展开整个词库
void DoCollapseWorks();//收缩整个词库
int GetShowFlag( HTREEITEM hItem, CPoint pt );
void DrawTempLine(CPoint ptSta, CPoint ptEnd);
//根据节点成tree
void XmlNodeToTreeNode(HTREEITEM hParentItem,const CXMLDOMNodePtr &pXmlNode);
private:
BOOL m_bEdit;//条目是否可以编辑
UINT m_TimerTicks;
// Zyu modify on 100726,支持64位
//UINT m_nScrollTimerID;
UINT_PTR m_nScrollTimerID;
CPoint m_HoverPoint;
// Zyu modify on 100726,支持64位
//UINT m_nHoverTimerID;
UINT_PTR m_nHoverTimerID;
DWORD m_dwDragStart;
BOOL m_bDragging;
CImageList* m_pDragImage;
HTREEITEM m_hItemDragS;
HTREEITEM m_hItemDragD;
int m_nShowFlag;
CPoint m_ptSta;
CPoint m_ptEnd;
BOOL m_bRub;
CXMLDOMFile* m_pXMLDoc;//xml文档指针
};
//////////////////////////////////////////////////////////////
// CInsTextDlg 对话框
class CInsTextDlg : public CModelessDialog
{
DECLARE_DYNAMIC(CInsTextDlg)
public:
CInsTextDlg(CWnd* pParent = NULL); // 标准构造函数
CInsTextDlg(UINT IDD, CWnd* pParent = NULL);
virtual ~CInsTextDlg();
// 对话框数据
enum { IDD = IDD_ARCHTEXT };
CArchTextLibTreeCtrl m_treeNames;//词库的类型树
CImageList m_imageList;//树的图片
CArchTextLibListBox m_dragNames;//未经排序的对应树中节点下数据的检索名
CArchTextLibListBox m_sortNames;//经排序的对应树中节点下数据的检索名
CToolBar m_toolBar;//工具条
CButton m_buttonAdd;//文件入库按钮
CButton m_buttonInput;//文件添加
CButton m_buttonFile;//导入文件按钮
CEdit m_editSearch;//文本框
BOOL m_bEditChanged;//文本框内容是否发生变化
////////////////////
//把显示文字设为单行
void SetSingleText(BOOL bSingle = TRUE){m_bSingleLineText = bSingle;}
BOOL IsSingleText(){return m_bSingleLineText;}//文字是否单行显示
CNameString* CreateNameString();//创建一个字条
void AddToLast();//添加到最近使用框中
void SetPreText(CString &szText);
void SetEditText(CString& szText);
CString GetEditText();
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
virtual BOOL OnInitDialog();//初始化对话框
afx_msg void OnLbnSelchangeName();//list选项更改时消息函数
afx_msg void OnEnChangeEditSearch();//编辑框更改消息函数
afx_msg void OnLbnDblclkListName();//双击list消息函数
afx_msg void OnSelectLetter(UINT nID);//工具条选择字母消息函数
afx_msg void OnBnClickedAddtolib();//入库按钮消息函数
afx_msg void OnBnClickedInputtolib();
afx_msg void OnBnClickedBtnInlib();
afx_msg void OnLbnSelchangeDragType();//此函数已失效
afx_msg void OnDestroy();
afx_msg void OnClose();
afx_msg void OnSize(UINT nType,int cx,int cy);
afx_msg void OnTvnSelchangedTree(NMHDR *pNMHDR, LRESULT *pResult);//树更改消息函数
afx_msg LRESULT OnNewLine(WPARAM w,LPARAM l);//创建新list项自消息函数
afx_msg LRESULT OnInSertLine(WPARAM w,LPARAM l);//插入新list项自消息函数
afx_msg LRESULT OnReNameLine(WPARAM w,LPARAM l);//重命名list项自消息函数
afx_msg LRESULT OnDeleteLine(WPARAM w,LPARAM l);//删除list项自消息函数
#if ADS<17
afx_msg UINT OnNcHitTest(CPoint point);
#else
afx_msg LRESULT OnNcHitTest(CPoint point);
#endif
protected:
CXMLDOMFile* m_pXMlDoc;//文档指针 在该对话框构造时打开 析构时关闭
BOOL m_bSort;//是否排序
BOOL m_bEdit;//是否可以编辑文本
HTREEITEM m_hLastItem;//最近点击的tree节点
void InitToolBar();//初始化工具条
void InitList();//初始化列表
void DeleteTree();//删除树
void InitTree();//初始化树
void SetNamesModify();////设置显示的列表框
void AddNamesByType(CArchTextLibListBox &listBox);//向列表框中添加数据
void ChangeListBox(BOOL bIsSort);////设置显示的列表框
void UpdateButton();//更新显示的按钮
BOOL ReadStoreData();//此函数已失效
BOOL WriteStoreData();//此函数已失效
//深度遍历tree
void GetXmlNodesValue(CArchTextLibListBox &listBox,const CXMLDOMNodePtr &pXmlNode,BOOL bAll,BOOL bSort);
void XmlNodeToTreeNode(HTREEITEM hParentItem,const CXMLDOMNodePtr &pXmlNode);
void DoDeleteItem();//删除列表条目
void DoInsertItem();//插入列表条目
void DoAppendItem();//添加列表条目
void DoModifyItem();//修改列表条目
//广度遍历tree形成界面tree
void BreadthXmlNodeToTreeNode(const CXMLDOMNodePtr &pXmlNode);
//广度遍历tree形成界面listbox
void BreadGetXmlNodesValve(CArchTextLibListBox &listBox,const CXMLDOMNodePtr &pXmlNode);
//深度遍历形成界面listbox
// void DeepGetXmlNodesValve(CArchTextLibListBox &listBox,const CXMLDOMNodePtr &pXmlNode);
// void AnalyseXmlTree(const MSXML2::IXMLDOMNodeListPtr& pXMLDOMNodeList, CArchTextLibListBox &listBox);
// void InsertIntoLst(const MSXML2::IXMLDOMNodePtr &pXmlNode,CArchTextLibListBox &listBox);
//得到xml节点tag名字
CString GetXMLNodeName(const MSXML2::IXMLDOMNodePtr &pIXMLDOMNodePtr);
//得到xml节点属性名字
// CString GetXMLNodeAttributeName(const MSXML2::IXMLDOMNodePtr &pIXMLDOMNodePtr);
//得到xml节点属性值
CString GetXMLNodeAttributeValue(const MSXML2::IXMLDOMNodePtr &pIXMLDOMNodePtr,const CString strNodeAttriName);
//得到xml节点值(仅对叶子节点)
// CString GetXMLNodeValue(const MSXML2::IXMLDOMNodePtr &pIXMLDOMNodePtr);
//是否有子节点
BOOL IsHasChildNodes(const MSXML2::IXMLDOMNodePtr &pIXMLDOMNodePtr);
//非递归深度遍历xmltree形成listbox
// void Test(const CXMLDOMNodePtr &pXmlNode,CArchTextLibListBox &listBox);
//设置字符串在界面回车(即加\n\r)
CString SetStrReturn(const CString &strText);
//删除字符串在界面回车(即加\n\r)
CString DelStrReturn(const CString &strText);
DECLARE_MESSAGE_MAP()
private:
BOOL m_bSingleLineText;//是否为单行文字
};
////////////////////////////////////////////////////////////////////////
////////////抽象出来的dbf格式文档数据////////////////////
class WordLibDbfInfo
{
public:
WordLibDbfInfo()
{
m_strAttrivalue = _T("");
m_strvalue = _T("");
}
WordLibDbfInfo(const WordLibDbfInfo&data)
{
m_strvalue = data.m_strvalue;
m_strAttrivalue = data.m_strAttrivalue;
}
WordLibDbfInfo&operator=(const WordLibDbfInfo&data)
{
m_strvalue = data.m_strvalue;
m_strAttrivalue = data.m_strAttrivalue;
return *this;
}
public:
CString m_strAttrivalue;//dbf文档中的 type 或 name项
CString m_strvalue;//每行中的所有content
};
//存储dbf信息的数组
typedef Array<WordLibDbfInfo> DBFArray;
//根据dbf文档中的type项做键值 形成的 map
typedef std::map<CString,DBFArray> TARCHWORDLIBDBFMAP;
//存储xml文档节点信息的数组
typedef Array<CXMLNodeInfo> XMLNodeInfoArray;
// CArchTextLibDlg 对话框
class CArchTextLibDlg : public CInsTextDlg
{
DECLARE_DYNAMIC(CArchTextLibDlg)
public:
CArchTextLibDlg(CWnd* pParent = NULL); // 标准构造函数
virtual ~CArchTextLibDlg();
// 对话框数据
enum { IDD = IDD_ARCHTEXTLIB };
CComboBox m_comboStyle;
int m_iAlign;
// modify by xly on 101222 支持记录字高
//CString m_csHeight;
static CString m_csHeight;
// modify by xly on 101014 支持记录文字样式
//CString m_csTextStyle;
static CString m_csTextStyle;
int m_iRunMode;
void SetTextStyle(const TCHAR* szStyle);
protected:
BOOL m_bInDialog;
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
virtual BOOL OnInitDialog();
afx_msg void OnLbnDblclkDragName();
afx_msg void OnBnClickedButtonFile();//导入数据按钮消息函数
afx_msg void OnExport();//导出数据
afx_msg void OnButtonReplace();//替换按钮消息函数
afx_msg void OnButtonPick();//提取cad图中数据函数
afx_msg void OnClose();
// Zyu modify on 100726,支持64位
//afx_msg void OnTimer(UINT nIDEvent);
afx_msg void OnTimer(UINT_PTR nIDEvent);
DECLARE_MESSAGE_MAP()
//读取txt数据
void ReadTxt(HTREEITEM hItem,const CString &strPath,CXMLDOMNodePtr&pXMLDOMNodePtr);
//读取xml数据
void ReadXml(HTREEITEM hItem,const CString &strPath,CXMLDOMNodePtr&pXMLDOMNodePtr);
//读取dbf数据
void ReadDbf(HTREEITEM hItem,const CString &strPath,CXMLDOMNodePtr&pXMLDOMNodePtr);
//把xml中指定节点下的词条数据导出txt
void ExportTxt(CStdioFile &file,const CXMLDOMNodePtr &pXmlNode);
//创建新的xml并把原xml文档指定节点下的所有数据导入新建的xml中
BOOL BuildDynamicXMLwithProcessingInstruction(CString&strPath);
public:
};
////////////////////////////////////////////////////
// TTextEdJig
class TTextEdJig : public TSymbEdJig {
protected:
TDbText *m_pText;
AcDbText *m_pAcadText;
static XExplodeDraw::TextAlignment m_AlignList[];
public:
TTextEdJig(CArchTextLibDlg *dlg, XPoint pt);
TTextEdJig(BOOL bIsTg, XPoint pt, double nHeight, const TCHAR*szText, AcDbObjectId idStyle, double nRotation);
~TTextEdJig();
virtual int DoIt(int *pKeyIndex=NULL);
DragStatus GetPoint(XPoint &pt);
CArchTextLibDlg *m_pDlg;
BOOL m_bIsTgText;
XPoint m_ptRef;
AcGeMatrix3d m_AcadTextMat;
AcDbObjectId m_idStyle;
void SetWHScale(double nWHScale);
void SetAlign(AcDb::TextVertMode vertMode, AcDb::TextHorzMode horzMode, AcGeMatrix3d mat);
void SetAlign(XExplodeDraw::TextAlignment Align);
protected:
virtual Adesk::Boolean update();
virtual AcDbEntity* entity() const;
};
///////////////////////////////////////////////////////////////////
//TMTextJig
class TMTextEdJig : public TSymbEdJig{
public:
TMTextEdJig(CArchTextLibDlg *dlg, XPoint pt);
TMTextEdJig(BOOL bIsTg, XPoint pt, double nHeight, const TCHAR*szText,
AcDbObjectId idStyle, double nRotation);
~TMTextEdJig();
virtual int DoIt(int *pKeyIndex=NULL);
DragStatus GetPoint(XPoint &pt);
CArchTextLibDlg *m_pDlg;
BOOL m_bIsTgText;
BOOL m_bSet;
XPoint m_ptRef;
AcGeMatrix3d m_AcadTextMat;
AcDbObjectId m_idStyle;
double m_dWidth;
CString m_strLast;//上一次的 jig中显示的文字
void SetWHScale(double nWHScale);
void SetAlign(AcDb::TextVertMode vertMode, AcDb::TextHorzMode horzMode, AcGeMatrix3d mat);
void SetAlign(XExplodeDraw::TextAlignment Align);
// Acad::ErrorStatus GetExtents2d(TDbEntity*pent,XPoint &ptLow, XPoint &ptUp);
// double GetMTextPageWidth();
protected:
virtual Adesk::Boolean update();
virtual AcDbEntity* entity() const;
protected:
TDbMText *m_pMText;
AcDbMText *m_pAcadMText;
// TDbText *m_pText;
// AcDbText *m_pAcadText;
// BOOL m_bMText;
static XExplodeDraw::TextAlignment m_AlignList[];
private:
};
bool GetSpecialChar(CWnd*pParent,CString &res);
bool GetWordFromLib(CWnd*pParent,CString &res);
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
///////////////////////////////////////////
class CChineseCode
{
public:
static void UTF_8ToUnicode(wchar_t* pOut,char *pText); // 把UTF-8转换成Unicode
static void UnicodeToUTF_8(char* pOut,wchar_t* pText); //Unicode 转换成UTF-8
static void UnicodeToGB2312(char* pOut,wchar_t uData); // 把Unicode 转换成 GB2312
static void Gb2312ToUnicode(wchar_t* pOut,char *gbBuffer);// GB2312 转换成 Unicode
static void GB2312ToUTF_8(CString& pOut,char *pText, int pLen);//GB2312 转为 UTF-8
static void UTF_8ToGB2312(CString &pOut, char *pText, int pLen);//UTF-8 转为 GB2312
};
#endif // !defined(AFX_INSTEXTDLG_H__FA6B9462_8FCD_432C_9C0E_3663CF9EC4F1__INCLUDED_)