#pragma once #include "resource.h" #include #include #include "afxwin.h" #include "GsPreviewCtrl.h" #include "XMLDOMFile.h" #include #include #include namespace DRAWFRAME { struct STPage { CString _pagename, _grpname; int _width, _length; STPage(LPCTSTR gname, LPCTSTR pname, int w, int l): _pagename(pname), _grpname(gname), _width(w), _length(l){} STPage(): _pagename(_T("")), _grpname(_T("")), _width(0), _length(0){}; }; typedef std::vector < STPage > PAGES ; struct STPageGrp { CString _grpname; int _idx, _width; PAGES _pages; STPageGrp(int idx, LPCTSTR name, int width, const PAGES & pages) : _width(width), _grpname(name), _idx(idx), _pages(pages){} STPageGrp() : _grpname(_T("")), _idx(-1), _pages(0), _width(0){} struct _comparePageGrp : public std::binary_function < const STPageGrp&, const STPageGrp&, bool > { bool operator () (const STPageGrp & group1, const STPageGrp & group2) const { return group1._idx < group2._idx; } }; }; typedef std::set < STPageGrp, STPageGrp::_comparePageGrp> PAGEGRPS; void InitPageGrp(); void default_init_func(); } // sg add 100907,保存专版定制软件中,各个子院或所的信息 class CSpecialtyOffice { public: CSpecialtyOffice(); CSpecialtyOffice(const CSpecialtyOffice& srcSpecialtyOffice); public: // 通长标题栏与图幅对应关系信息 typedef struct longTitleInfo { // 0表示横式图框,对应竖栏;1表示立式图框,对应横栏 int nRow; // 图幅 CString csBreadth; // 通长标题栏图块编号 CString csLongTitle; } SLongTitle; // 对中标志相关信息 typedef struct midAlignBlockInfo { // 是否有对中标志,0为否,1为是 int m_nHasMidBlock; // DWB名 CString csDwbName; // 图框上部、下部的对中标志,对应的图块名 CString csUpDownBlock; // 图框左部的对中标志,对应的图块名 CString csLeftBlock; // 图框右部的对中标志,对应的图块名 CString csRightBlock; } SMidBlock; public: // 下属设计院名或设计所名称 CString m_csName; // 保存通长标题栏的图库名,所有图幅和样式下的通长标题栏,肯定都放到一个TK里 CString m_csTkName; // 各个图幅以及横式、立式样式下的通长标题栏图块名数组 CArray m_aryLongTitle; // 各个位置下的对中标志图块名 SMidBlock m_sMidBlock; public: // 根据图幅和样式获得通长标题栏图块名 CString FindLongTitleBlkName(int nRow, int nBreadth); // 判断是否有横栏 BOOL HasRANGEFrame(); }; // CDrawingFrameDlg 对话框 class CDrawingFrameDlg : public CAcUiDialog { DECLARE_DYNAMIC(CDrawingFrameDlg) public: CDrawingFrameDlg(CWnd* pParent = NULL); virtual ~CDrawingFrameDlg(); // 对话框数据 enum { IDD = IDD_DRAWINGFRAME }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 virtual BOOL OnInitDialog(); virtual void OnOK(); protected: DECLARE_MESSAGE_MAP() int m_iStandard; int m_iRow; int m_iLengthen; int m_iCustomSize; CString m_strLength; CString m_strWidth; CString m_strScale; CComboBox m_colLenthen; CComboBox m_colCustomSize; BOOL m_bStandard; BOOL m_bLong; BOOL m_bTicket; BOOL m_bPosition; BOOL m_bAdjunct; BOOL m_bDirect; BOOL m_bSpace; HICON m_hIcon; // sg add 100907,与下属设计院名或设计所名称的下拉列表相对应 CComboBox m_cmbOffice; bool m_bPreview; //add by whl protected: void ReadStoreValue(); void WriteStoreValue(); BOOL GetBlockName(XString &sBlockName); void SetSizeEdit(int type, int curSel = 0); void UpdateLengthen(); void UpdateStandard(BOOL bFlag = TRUE); void UpdateSize(BOOL bSaveAndValidate = FALSE); void UpdateTitle(); void UpdateSpace(); void UpdateDirect(); protected: // 下列函数,只用在专版软件中 // sg add 100907,通过tch.ini文件,判断当前软件是否是专版 bool IsSpecialtyVer(); // sg add 100907,解析TSpecialtyOffice.xml文件,初始化m_lstOfficeInfo列表 // 下面几个函数,主要是用于分散代码,对应解析对应部分的XML文件,都只在GetOfficeInfoFromXML函数中调用 bool GetOfficeInfoFromXML(); void GetLineWidthXML(const CXMLDOMNodePtr &pXMLChildNodePtr); // 图框线宽 void GetTicketXML(const CXMLDOMNodePtr &pXMLChildNodePtr); // 会签 void GetLongTitleXML(const CXMLDOMNodePtr &pXMLChildNodePtr, CSpecialtyOffice &info); // 通长标题栏 void GetMidBlockXML(const CXMLDOMNodePtr &pXMLChildNodePtr, CSpecialtyOffice &info); // 对中标志 // sg add 100908,根据下属院别的选择以及图幅,获得对应的“通长标题栏”图块名称 bool GetLongTitleBlkName(); // sg add 111102,根据选择的下属院别,获得对中标记图块名称 BOOL GetMidAlignBlock(XString &szUpDownBlock, XString &szLeftBlock, XString &szRightBlock); public: afx_msg void OnDataChangeAx(); afx_msg void OnDataChangeR(); afx_msg void OnCbnSelchangeComboLenthength(); afx_msg void OnCbnSelchangeComboCustomsize(); afx_msg void OnEnKillfocusEditLength(); afx_msg void OnEnKillfocusEditWidth(); afx_msg void OnEnChangeEditLength(); afx_msg void OnEnChangeEditWidth(); afx_msg void OnBnClickedCheckTitleStandard(); afx_msg void OnBnClickedCheckTitleLong(); afx_msg void OnBnClickedCheckTicket(); afx_msg void OnBnClickedCheckPosition(); afx_msg void OnBnClickedCheckAdjunct(); afx_msg void OnBnClickedButtonPickadjunct(); afx_msg void OnBnClickedButtonPickticket(); afx_msg void OnBnClickedButtonPicktitle(); afx_msg void OnBnClickedButtonPickdirect(); afx_msg void OnCbnKillfocusComboScale(); afx_msg void OnBnClickedCheckSpace(); afx_msg void OnBnClickedCheckDirect(); // sg add 100908,增加院别选择事件 afx_msg void OnCbnSelchangeComboOffice(); protected: CGsPreviewCtrl m_PreviewCtrl; AcDbDatabase m_PreviewDb; AcDbObjectId m_idOldBlock; XString m_strStandard; XString m_strLong; XString m_strTichet; XString m_strAdjunct; XString m_strDirect; // sg add 100907,增加院别信息列表 TDPtrList m_lstOfficeInfo; // sg add 100916,保存用户上次选择的院别 static int m_nLastOffice; // sg add 111102,根据选择的院别,确定“立式”是否可以选择 BOOL m_bRANGE; // sg add 111014,从XML中读取是否有会签栏,只有一个且不与用户交互,下属设计院必须统一 // m_bTicket默认值的备份,防止经过用户一系列操作后,会签栏不正确的有或者没有了 BOOL m_bDefaultTicket; // wlw add 130314,从XML中读取是否有附件栏,只有一个且不与用户交互,下属设计院必须统一 // m_bAdjunct默认值的备份,防止经过用户一系列操作后,会签栏不正确的有或者没有了 BOOL m_bDefaultAdjunct; // sg add 111021,在专版中增加图框的线宽可以定制的功能 // 该值只有1组,下属设计院必须统一 AcGeDoubleArray m_aryFrameWidth; //wlw add 130314,从专版XML中读取图幅可选 BOOL m_bA0; BOOL m_bA1; BOOL m_bA2; BOOL m_bA3; BOOL m_bA4; CString GetSizeDesc();//返回图幅描述字符串 void InsertFrame(AcDbBlockTableRecord *pBlockTabRecord, AcGePoint3d ptIns, double &width, double &high); void DrawFrame(AcDbBlockTableRecord *pBlockTabRecord, AcGePoint3d ptIns, double &width, double &high, int flag = 1); void DrawFrameBlock(AcGePoint3d ptIns,double &width, double &high); void DrawInsertPoint(AcDbBlockTableRecord *pBlockTabRecord, AcGePoint3d ptIns); void InsertBlock(AcDbBlockTableRecord *pBlockTabRecord, XString sBlockName, AcGePoint3d ptIns, double angle, AcDbObjectId idLayer); void GetBlockSize(XString sBlockName, double &width, double &high); void UpdatePreview(); virtual BOOL DestroyWindow(); };