2026-10-04 00:04:20 +08:00
|
|
|
|
#pragma once
|
2026-09-28 15:28:50 +08:00
|
|
|
|
#include <afxcView.h> // for CTreeView
|
|
|
|
|
|
#include "OpeningCheck.h"
|
|
|
|
|
|
#include "resource.h"
|
|
|
|
|
|
|
|
|
|
|
|
namespace NDoorWinCheck
|
|
|
|
|
|
{
|
|
|
|
|
|
class CDataTable;
|
|
|
|
|
|
|
|
|
|
|
|
class CSplitFrame : public CFrameWnd
|
|
|
|
|
|
{
|
|
|
|
|
|
DECLARE_DYNCREATE(CSplitFrame)
|
|
|
|
|
|
|
|
|
|
|
|
DECLARE_MESSAGE_MAP()
|
|
|
|
|
|
public:
|
|
|
|
|
|
virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);
|
|
|
|
|
|
|
|
|
|
|
|
CSplitterWnd m_wndSplit;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class TreeItemData;
|
|
|
|
|
|
class CDoorWinTreeView;
|
|
|
|
|
|
class CGridView;
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 数据
|
2026-09-28 15:28:50 +08:00
|
|
|
|
class CFrameData
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
CFrameData() : m_pGridView(NULL), m_pTreeView(NULL){m_pDataTable = new CDataTable;}
|
|
|
|
|
|
~CFrameData() {delete m_pDataTable;m_pDataTable = NULL;}
|
|
|
|
|
|
public:
|
|
|
|
|
|
CDataTable *m_pDataTable;
|
|
|
|
|
|
|
|
|
|
|
|
CGridView *m_pGridView;
|
|
|
|
|
|
CDoorWinTreeView *m_pTreeView;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
enum ETips {eConflictTip = 0,
|
|
|
|
|
|
eNoFloorTip,
|
|
|
|
|
|
eNoDataTip,
|
|
|
|
|
|
eDataInOtherDWGTip,
|
|
|
|
|
|
eNoLabelTip,
|
|
|
|
|
|
eCorrespondingTip,
|
|
|
|
|
|
eBlockData,
|
|
|
|
|
|
eDocNotInProj,
|
|
|
|
|
|
eTipNum};
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 门窗检查窗口
|
2026-09-28 15:28:50 +08:00
|
|
|
|
class CDoorWinFrame : public CFrameWnd
|
|
|
|
|
|
{
|
|
|
|
|
|
DECLARE_DYNCREATE(CDoorWinFrame)
|
|
|
|
|
|
|
|
|
|
|
|
DECLARE_MESSAGE_MAP()
|
|
|
|
|
|
public:
|
|
|
|
|
|
CDoorWinFrame();
|
|
|
|
|
|
virtual ~CDoorWinFrame();
|
|
|
|
|
|
|
|
|
|
|
|
void SetGridView(CGridView *pGrid);
|
|
|
|
|
|
void SetTreeView(CDoorWinTreeView *pTree);
|
|
|
|
|
|
CDataTable* GetDataTable() {return m_dataCenter.m_pDataTable;}
|
|
|
|
|
|
CFrameData* GetData();
|
|
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 幻灯片显示函数:
|
|
|
|
|
|
//显示幻灯
|
2026-09-28 15:28:50 +08:00
|
|
|
|
static void ShowSlide(CStatic& st, CImageDC& imgdc, const TCHAR* sldName);
|
|
|
|
|
|
void SetSlideItem(TreeItemData *pItemData);
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 清空显示,和保存的数据
|
2026-09-28 15:28:50 +08:00
|
|
|
|
void ClearSlideItem();
|
|
|
|
|
|
void ShowSlide2d(CString &strStyle2d);
|
|
|
|
|
|
void ShowSlide3d(CString &strStyle3d);
|
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 更新原图
|
2026-09-28 15:28:50 +08:00
|
|
|
|
void UpdateDWG(TreeItemData *pItemData);
|
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
|
void ReDrawWnd(); // 窗口更新。
|
2026-09-28 15:28:50 +08:00
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 提示信息
|
2026-09-28 15:28:50 +08:00
|
|
|
|
void SetTip (ETips eTip, bool bSet = true);
|
|
|
|
|
|
CString GetTip(ETips eTip) const ;
|
|
|
|
|
|
CString GetTip() const ;
|
|
|
|
|
|
void SetConflictDataNum(int nNum) {m_nConflictDataNum = nNum;};
|
|
|
|
|
|
void SetNoLabelDataNum(int nNum) {m_nNoLabelDataNum = nNum;};
|
|
|
|
|
|
void ShowMessage();
|
|
|
|
|
|
|
|
|
|
|
|
void GetDataTip(CDataTable *pTable);
|
|
|
|
|
|
|
|
|
|
|
|
void ClearData();
|
2026-10-04 00:04:20 +08:00
|
|
|
|
void ReadDWG(); // 读取DWG中的数据。
|
2026-09-28 15:28:50 +08:00
|
|
|
|
BOOL AddTip(UINT idControl, const TCHAR *str=NULL);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd/*, UINT nID, CCreateContext* pContext = NULL*/);
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);
|
|
|
|
|
|
virtual void PostNcDestroy(); // default to delete this.
|
|
|
|
|
|
virtual BOOL PreTranslateMessage(MSG* pMsg);
|
|
|
|
|
|
|
|
|
|
|
|
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
|
|
|
|
|
|
afx_msg void OnClose();
|
|
|
|
|
|
afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
|
|
|
|
|
|
afx_msg void OnDestroy();
|
|
|
|
|
|
afx_msg void OnSize(UINT nType, int cx, int cy);
|
|
|
|
|
|
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
|
|
|
|
|
|
afx_msg void OnBtnSetClick();
|
|
|
|
|
|
afx_msg void OnBtnUpdate();
|
|
|
|
|
|
afx_msg void OnBtnFromDWG();
|
|
|
|
|
|
afx_msg void OnBtnChoseExtent();
|
|
|
|
|
|
afx_msg void OnPic2dClick();
|
|
|
|
|
|
afx_msg void OnPic3dClick();
|
|
|
|
|
|
afx_msg void OnPaint();
|
|
|
|
|
|
afx_msg LONG_PTR onAcadKeepFocus(UINT_PTR, LONG_PTR);
|
|
|
|
|
|
afx_msg void OnSetFocus(CWnd* pOldWnd);
|
|
|
|
|
|
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
|
|
|
|
|
|
protected:
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 距离尺寸计算函数
|
2026-09-28 15:28:50 +08:00
|
|
|
|
CRect BtnSetRect() const;
|
|
|
|
|
|
CRect Slide2dRect() const;
|
|
|
|
|
|
CRect Slide3dRect() const;
|
|
|
|
|
|
CRect SplitWndRect(const CRect &rectFrame) const;
|
|
|
|
|
|
CRect TipRect(const CRect &rectFrame) const;
|
|
|
|
|
|
CRect BtnUpdateRect(const CRect &rectFrame) const;
|
|
|
|
|
|
CRect BtnFromDWGRect(const CRect &rectFrame) const;
|
|
|
|
|
|
CRect BtnChoseRect(const CRect &rectFrame) const;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
enum {IDC_BTN_UPDATE = 1,
|
|
|
|
|
|
IDC_BTN_FROMDWG,
|
|
|
|
|
|
IDC_BTN_EXTENT,
|
|
|
|
|
|
IDC_BTN_SET,
|
|
|
|
|
|
IDC_IMAGE_2D,
|
|
|
|
|
|
IDC_IMAGE_3D,
|
|
|
|
|
|
IDC_LABEL_MESSAGE};
|
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
|
CSize m_sizeSet; // 设置按钮的大小
|
|
|
|
|
|
CSize m_sizeBtnBottom; // 底部三个按钮的大小
|
|
|
|
|
|
CSize m_sizeSlide; // slide的宽高
|
|
|
|
|
|
int m_nLabelHei; //提示信息框高度
|
2026-09-28 15:28:50 +08:00
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
|
int m_nLeftBlank, m_nRightBlank, m_nTopBlank, m_nBottomBlank; // 上下左右的留空
|
|
|
|
|
|
// 行间距:上不按钮距离拆分窗口,拆分窗口距离提示信息,提示信息距离底部按钮
|
2026-09-28 15:28:50 +08:00
|
|
|
|
int m_nRowBlank1, m_nRowBlank2, m_nRowBlank3;
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 列间距(水平方向):设置按钮==slide2d, slide2d==slide3d, 底部按钮之间
|
2026-09-28 15:28:50 +08:00
|
|
|
|
int m_nColBlank1, m_nColBlank2, m_nColBlank3;
|
|
|
|
|
|
|
|
|
|
|
|
CButton m_btnSet;
|
|
|
|
|
|
CSplitFrame *m_pSplitFrame;
|
|
|
|
|
|
CEdit m_editTip;
|
|
|
|
|
|
CButton m_btnUpdate, m_btnFromDwg, m_btnChoseExtent;
|
2026-10-04 00:04:20 +08:00
|
|
|
|
CStatic m_pic3d; // 显示三维样式
|
|
|
|
|
|
CStatic m_pic2d; // 显示二维样式
|
2026-09-28 15:28:50 +08:00
|
|
|
|
CString m_cs2DStyle; // 2D
|
|
|
|
|
|
CString m_cs3DStyle; // 2D
|
|
|
|
|
|
CImageDC m_picSlide2d, m_picSlide3d;
|
|
|
|
|
|
TreeItemData *m_pItemToSlide;
|
|
|
|
|
|
// CButton m_btnImage;
|
|
|
|
|
|
CFont font;
|
|
|
|
|
|
|
|
|
|
|
|
CFrameData m_dataCenter;
|
|
|
|
|
|
int m_nConflictDataNum;
|
|
|
|
|
|
int m_nNoLabelDataNum;
|
|
|
|
|
|
bool m_bTip[eTipNum];
|
|
|
|
|
|
|
|
|
|
|
|
CToolTipCtrl m_wndToolTip;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 树控件的每个选项需要关联一个数据,也用于Grid项,
|
|
|
|
|
|
// (工程项,本图项,未创建工程,冲突项)、(楼层项)、(某类型)、(某编号)(某子项,代表一个具体的门窗)
|
2026-09-28 15:28:50 +08:00
|
|
|
|
enum ETreeItemType {eProj = 0, eDWG, eNoProj, eConflict, eFloor, eSameStyle, eSameName, eOneItem, eOther};
|
|
|
|
|
|
class TreeItemData : public WRowData
|
|
|
|
|
|
{
|
|
|
|
|
|
protected:
|
2026-10-04 00:04:20 +08:00
|
|
|
|
TreeItemData() {} // 保护型构造函数,防止外部创建该实例
|
2026-09-28 15:28:50 +08:00
|
|
|
|
virtual ~TreeItemData() {} //
|
|
|
|
|
|
public:
|
|
|
|
|
|
virtual ETreeItemType GetType()const = 0;
|
|
|
|
|
|
virtual EEntType GetEntType() const {return eDoorTypeNum;}
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 此处的2D3D相对并非绝对的2D、3D。对于不同的子类型,该函数代表不同的意义。
|
|
|
|
|
|
// 注意更新sProp和DWG
|
2026-09-28 15:28:50 +08:00
|
|
|
|
virtual void SetSlideType2d(CString style) {}
|
|
|
|
|
|
virtual void SetSlideType3d(CString style) {}
|
|
|
|
|
|
|
|
|
|
|
|
void SetEntSlide(AcDbObjectId &id, SOpeningProp &sProp, CString strStyle, bool b2dOr3d);
|
|
|
|
|
|
void SetWidItemSlide(CWidItem *pWidItem, CString strStyle, bool b2dor3d);
|
|
|
|
|
|
void SetAryWidItemSlide(AryWidItemPtr &aryWidItem, CString strStyle, bool b2dOr3d);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class TreeNullItemData : public TreeItemData
|
|
|
|
|
|
{
|
|
|
|
|
|
virtual ETreeItemType GetType()const {return eOther;}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 工程内
|
2026-09-28 15:28:50 +08:00
|
|
|
|
class TreeItemProj : public TreeItemData
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
virtual ETreeItemType GetType()const {return eProj;}
|
|
|
|
|
|
CDataTable *pTable;
|
2026-10-04 00:04:20 +08:00
|
|
|
|
BOOL bNeedFloor; // 是否需要分楼层
|
2026-09-28 15:28:50 +08:00
|
|
|
|
};
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 本图内
|
2026-09-28 15:28:50 +08:00
|
|
|
|
class TreeItemDWG : public TreeItemData
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
virtual ETreeItemType GetType()const {return eDWG;}
|
2026-10-04 00:04:20 +08:00
|
|
|
|
CDataTable *pTable; // 本图
|
|
|
|
|
|
BOOL bNeedFloor; // 是否需要分楼层
|
|
|
|
|
|
BOOL bOnlyProj; // 是否仅仅需要本工程的数据 // **
|
2026-09-28 15:28:50 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 本图未创建工程
|
2026-09-28 15:28:50 +08:00
|
|
|
|
class TreeItemNoProj : public TreeItemData
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
virtual ETreeItemType GetType()const {return eNoProj;}
|
|
|
|
|
|
CDataTable *pTable;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 工程内冲突,工程外冲突,本图冲突
|
2026-09-28 15:28:50 +08:00
|
|
|
|
enum EConflictType {eConflictProj = 0, eConflictNoProj, eConflictDWG, eConflictProjDWG};
|
|
|
|
|
|
class TreeItemConflict : public TreeItemData
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
virtual ETreeItemType GetType()const {return eConflict;}
|
|
|
|
|
|
CDataTable *pTable;
|
2026-10-04 00:04:20 +08:00
|
|
|
|
EConflictType nType; // 工程内冲突,未创建工程的冲突,本图冲突, 工程内本图冲突
|
2026-09-28 15:28:50 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class TreeItemFloor : public TreeItemData
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
virtual ETreeItemType GetType()const {return eFloor;}
|
2026-10-04 00:04:20 +08:00
|
|
|
|
CGroup *pFloor; // 某层内的所有门窗
|
2026-09-28 15:28:50 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 门、窗、弧窗、...
|
2026-09-28 15:28:50 +08:00
|
|
|
|
class TreeItemSameStyle : public TreeItemData
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
virtual ~TreeItemSameStyle() {ClearAryWidItemPtr(aryWidItemPtr);}
|
|
|
|
|
|
virtual ETreeItemType GetType()const {return eSameStyle;}
|
|
|
|
|
|
virtual EEntType GetEntType() const;
|
|
|
|
|
|
virtual void SetSlideType2d(CString style);
|
|
|
|
|
|
virtual void SetSlideType3d(CString style);
|
2026-10-04 00:04:20 +08:00
|
|
|
|
AryWidItemPtr aryWidItemPtr; // 该类型所对应的所有的item
|
2026-09-28 15:28:50 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 单个名字的节点分为下面的情况:主编号
|
2026-09-28 15:28:50 +08:00
|
|
|
|
class TreeItemSameName : public TreeItemData
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
virtual ~TreeItemSameName() {}
|
|
|
|
|
|
virtual ETreeItemType GetType()const {return eSameName;}
|
|
|
|
|
|
virtual EEntType GetEntType() const;
|
|
|
|
|
|
virtual void SetSlideType2d(CString style);
|
|
|
|
|
|
virtual void SetSlideType3d(CString style);
|
2026-10-04 00:04:20 +08:00
|
|
|
|
CWidItem widItem; // 该类型所对应的所有的item
|
2026-09-28 15:28:50 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 子编号
|
2026-09-28 15:28:50 +08:00
|
|
|
|
class GridItemOneItem : public TreeItemData
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
virtual ETreeItemType GetType()const {return eOneItem;}
|
|
|
|
|
|
virtual EEntType GetEntType() const;
|
|
|
|
|
|
virtual void SetSlideType2d(CString style);
|
|
|
|
|
|
virtual void SetSlideType3d(CString style);
|
|
|
|
|
|
EEntType eEntType;
|
|
|
|
|
|
CItem *pItem;
|
|
|
|
|
|
int nIndex;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
enum EGridColorIndex {
|
2026-10-04 00:04:20 +08:00
|
|
|
|
eMainLabelColor = 0, // 主编号
|
|
|
|
|
|
eTypeColor, // 门窗类型编号
|
|
|
|
|
|
eFloorColor, // 楼层编号
|
|
|
|
|
|
eChangedColor, // 被修改的数据
|
|
|
|
|
|
eRemovedColor, // 被删除的数据
|
2026-09-28 15:28:50 +08:00
|
|
|
|
eRemovedTextColor,
|
2026-10-04 00:04:20 +08:00
|
|
|
|
eOtherDWGColor, // 其他DWG图纸中的数据
|
|
|
|
|
|
eTempLabelColor, // 临时编号的数据
|
|
|
|
|
|
eOthersPropColor, // 不是自己的属性
|
|
|
|
|
|
eReadOnlyColor, // 只读的属性
|
|
|
|
|
|
eRedConflictColor, // 主编号,“冲突”红显
|
|
|
|
|
|
eColorItemNum // 总的编号的类型数
|
2026-09-28 15:28:50 +08:00
|
|
|
|
};
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 门窗属性显示表格
|
2026-09-28 15:28:50 +08:00
|
|
|
|
class CPropGrid : public WDGrid
|
|
|
|
|
|
{
|
|
|
|
|
|
DECLARE_DYNCREATE(CPropGrid)
|
|
|
|
|
|
public:
|
|
|
|
|
|
CPropGrid() : WDGrid(true, 100), m_nCurRow(-1) {}
|
|
|
|
|
|
void RemoveAllItem();
|
2026-10-04 00:04:20 +08:00
|
|
|
|
void ReCreate(TreeItemData *pItemData); // 绘制
|
2026-09-28 15:28:50 +08:00
|
|
|
|
|
|
|
|
|
|
void CreateProj(TreeItemProj *pItem);
|
|
|
|
|
|
void CreateDWG(TreeItemDWG *pItem);
|
|
|
|
|
|
void CreateNoProj(TreeItemNoProj *pItem);
|
|
|
|
|
|
void CreateConflict(TreeItemConflict *pItem);
|
|
|
|
|
|
void CreateFloor(TreeItemFloor *pItem);
|
|
|
|
|
|
void CreateOneStyle(TreeItemSameStyle *pItem);
|
|
|
|
|
|
void CreateOneName(TreeItemSameName *pItem);
|
|
|
|
|
|
|
|
|
|
|
|
WDGridTreeRow* AddNewRow(WDGridTreeRow *pParentRow);
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 向列表中添加元素:
|
2026-09-28 15:28:50 +08:00
|
|
|
|
bool AddSingleItem(CItem* pItem, int index, WDGridTreeRow *pParentRow,
|
|
|
|
|
|
AryEShowItem &aryShowItem, int nEntIndex, CStringArray &aryProp);
|
|
|
|
|
|
void AddSameNameItem(CWidItem* pWidItem, WDGridTreeRow *pParentRow,
|
|
|
|
|
|
AryEShowItem &aryShowItem);
|
|
|
|
|
|
void AddSameTypeItem(AryWidItemPtr &aryWidItemPtr, EEntType eEntType, WDGridTreeRow *pParent,
|
|
|
|
|
|
AryEShowItem &aryShowItem, BOOL bShowType = TRUE);
|
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 检测某类型是否具有某属性
|
2026-09-28 15:28:50 +08:00
|
|
|
|
static BOOL TestHasShowItem(EEntType eEntTyp, bool bText, EShowItem eShowItem);
|
|
|
|
|
|
|
|
|
|
|
|
void SetFlagProp(DWORD dw) {m_flagShowProp = dw;}
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 设置Grid列信息,通过它来设置列表的列。
|
2026-09-28 15:28:50 +08:00
|
|
|
|
void SetGridColumn(AryEtype &aryEtype, AryEShowItem &aryEShowItem);
|
|
|
|
|
|
|
|
|
|
|
|
void UpdateDWG();
|
2026-10-04 00:04:20 +08:00
|
|
|
|
void RefreshGridContent(); // 每个Grid重新提取内容,更新
|
|
|
|
|
|
void RefreshGridTreeRow(WDGridTreeRow *pRow); // 更新
|
2026-09-28 15:28:50 +08:00
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 第二列之后,第一列和第二列是标签列
|
2026-09-28 15:28:50 +08:00
|
|
|
|
EShowItem GetShowItemIndex(int nCol);
|
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
|
//add by lgy 20120301 为了保证修改grid单元格中类型,宽,高等项后
|
|
|
|
|
|
//要修改对应的新编号单元格的内容
|
2026-09-28 15:28:50 +08:00
|
|
|
|
CString GetItemSerial(const CString strType);
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 保护成员函数:
|
2026-09-28 15:28:50 +08:00
|
|
|
|
BOOL EmptyGrid() const {return GetColNum() < 2;}
|
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 检测是否有修改过的数据,eCorrespondingTip;
|
2026-09-28 15:28:50 +08:00
|
|
|
|
bool HasModifiedData();
|
|
|
|
|
|
bool HasModifiedData(WDGridTreeRow *pRow);
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 虚函数
|
|
|
|
|
|
// 用来设置颜色
|
2026-09-28 15:28:50 +08:00
|
|
|
|
virtual void OnBeforeRefresh(WDGridCell&cell);
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 准备combo中的数据
|
2026-09-28 15:28:50 +08:00
|
|
|
|
virtual void OnCellComboString(WDGridCell &cell,CComboBox&combo);
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 详细的设置一些编辑属性
|
2026-09-28 15:28:50 +08:00
|
|
|
|
virtual bool OnBeforeEdit(WDGridCell&cell,bool &bModified);
|
|
|
|
|
|
virtual bool OnModified(WDGridCell&cell,CString &text);
|
|
|
|
|
|
virtual void OnDataChanged();
|
|
|
|
|
|
|
|
|
|
|
|
DECLARE_MESSAGE_MAP()
|
2026-10-04 00:04:20 +08:00
|
|
|
|
virtual void OnCurChanged();//当前行列变化,子类一定要调整用基类
|
2026-09-28 15:28:50 +08:00
|
|
|
|
|
|
|
|
|
|
int m_nCurRow;
|
|
|
|
|
|
|
|
|
|
|
|
DWORD m_flagShowProp;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class CGridView : public CFormView
|
|
|
|
|
|
{
|
|
|
|
|
|
DECLARE_DYNCREATE(CGridView)
|
|
|
|
|
|
protected:
|
|
|
|
|
|
CGridView();
|
|
|
|
|
|
|
|
|
|
|
|
// Form Data
|
|
|
|
|
|
public:
|
|
|
|
|
|
//{{AFX_DATA(CInputView)
|
|
|
|
|
|
enum { IDD = IDD_DLG_GRIDFORM };
|
|
|
|
|
|
//}}AFX_DATA
|
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
|
void ReCreate(TreeItemData *pItemData); // 绘制
|
2026-09-28 15:28:50 +08:00
|
|
|
|
void UpdateDWG();
|
2026-10-04 00:04:20 +08:00
|
|
|
|
void RefreshGridContent(); // 每个Grid重新提取内容,更新
|
|
|
|
|
|
void RefreshGrid(); // Grid更新显示的颜色,内容不变
|
2026-09-28 15:28:50 +08:00
|
|
|
|
void Clear() {m_grid.RemoveAllItem();}
|
|
|
|
|
|
void SelectRow(long i) {if (i < m_grid.GetRowNum()) m_grid.SelectRow(i);}
|
|
|
|
|
|
// Implementation
|
2026-10-04 00:04:20 +08:00
|
|
|
|
//modify by lgy 20120306 9.0中要求提取图纸之后记录之前修改的页面
|
2026-09-28 15:28:50 +08:00
|
|
|
|
CPropGrid m_grid;
|
|
|
|
|
|
protected:
|
|
|
|
|
|
virtual ~CGridView();
|
|
|
|
|
|
virtual void OnInitialUpdate();
|
|
|
|
|
|
|
|
|
|
|
|
// Generated message map functions
|
|
|
|
|
|
//{{AFX_MSG(CInputView)
|
|
|
|
|
|
afx_msg void OnSize(UINT nType, int cx, int cy);
|
|
|
|
|
|
//}}AFX_MSG
|
|
|
|
|
|
DECLARE_MESSAGE_MAP()
|
|
|
|
|
|
//CPropGrid m_grid;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class CDoorWinTreeView : public ::CTreeView
|
|
|
|
|
|
{
|
|
|
|
|
|
DECLARE_DYNCREATE(CDoorWinTreeView)
|
|
|
|
|
|
public:
|
|
|
|
|
|
CDoorWinTreeView();
|
|
|
|
|
|
~CDoorWinTreeView();
|
|
|
|
|
|
|
|
|
|
|
|
// void SetDoorData();
|
|
|
|
|
|
void FillTreeView();
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 取得头分支的名字和扩展数据
|
|
|
|
|
|
// 0:第一分支名字;1:第二分支名字,2:第三分支名字;3:第四分支名字,如果不存在,返回空。
|
2026-09-28 15:28:50 +08:00
|
|
|
|
static CString GetHeadItemName(int nFlag);
|
|
|
|
|
|
static CString GetHeadItemName1(int nFlag);
|
|
|
|
|
|
static TreeItemData* GetHeadItemData(int nFlag);
|
|
|
|
|
|
static TreeItemData* GetHeadItemData1(int nFlag);
|
|
|
|
|
|
|
|
|
|
|
|
void ShowRootView() const;
|
|
|
|
|
|
void Clear();
|
|
|
|
|
|
static void SortWidItemAry(AryWidItemPtr &aryWidItemPtr);
|
|
|
|
|
|
static void SortAryItem(AryItemPtr &aryItemPtr);
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
void SetNewStyle(long lStyleMask, BOOL bSetBits);
|
|
|
|
|
|
|
|
|
|
|
|
static HTREEITEM AddTreeItem(CItem *pItem, CTreeCtrl &tree, TV_INSERTSTRUCT &tvItem, HTREEITEM hParent);
|
|
|
|
|
|
static HTREEITEM AddTreeItem(CTreeCtrl &tree, TV_INSERTSTRUCT &tvItem, CString &text, TreeItemData *pData, HTREEITEM hParent);
|
|
|
|
|
|
static void AddWidItemAry(CTreeCtrl &tree, AryWidItemPtr widItem[eDoorTypeNum], HTREEITEM hItemParent);
|
|
|
|
|
|
protected:
|
|
|
|
|
|
virtual void OnDraw(CDC* pDC);
|
|
|
|
|
|
virtual void OnInitialUpdate();
|
|
|
|
|
|
virtual void OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult);
|
|
|
|
|
|
|
|
|
|
|
|
// msg
|
|
|
|
|
|
afx_msg int OnCreate(LPCREATESTRUCT lpcs);
|
|
|
|
|
|
protected:
|
|
|
|
|
|
DECLARE_MESSAGE_MAP()
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 门窗设置对话框
|
2026-09-28 15:28:50 +08:00
|
|
|
|
class CSetDlg : public GlwCAcUiDialog
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
CSetDlg(CWnd* pParent = NULL);
|
|
|
|
|
|
~CSetDlg() {}
|
|
|
|
|
|
enum { IDD = IDD_DLG_DOORWIN_CHECK_SET};
|
|
|
|
|
|
|
|
|
|
|
|
int CurrSel() const;
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
static BOOL CheckCurrDWG() {return m_bCheckCurrDWG;}
|
|
|
|
|
|
static BOOL CheckCurrProj() {return m_bCheckCurrProj && !IsEmptyProject();}
|
|
|
|
|
|
static BOOL CheckBlock() {return m_bCheckBlock;}
|
|
|
|
|
|
static BOOL CheckText() {return m_bCheckText;}
|
|
|
|
|
|
static BOOL AccordFloor() {return m_bAccordFloor;}
|
|
|
|
|
|
static BOOL IsZoomDoorWin() {return m_bZoomDoorWin;}
|
|
|
|
|
|
static BOOL IsShowImag() {return m_bShowImg;}
|
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 供外部调用
|
|
|
|
|
|
// 检测某类型门窗的某种属性是否被选择了。
|
2026-09-28 15:28:50 +08:00
|
|
|
|
static BOOL TestItemChecked(EEntType eDoorWinCheckType, EShowItem eItem);
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 检测某类型门窗的是否包含某种属性。
|
2026-09-28 15:28:50 +08:00
|
|
|
|
static BOOL TestHasShowParam(EEntType eDoorWinCheckType, EShowItem eItem);
|
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 测试该标记中是否选中该选项
|
2026-09-28 15:28:50 +08:00
|
|
|
|
static BOOL TestItemIsSet(EShowItem eItem, DWORD flagCheck);
|
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 查看这几个类型都有哪几个参数
|
2026-09-28 15:28:50 +08:00
|
|
|
|
static DWORD GetShowFlag(AryEtype &aryType, AryEShowItem &aryShowItem);
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 查看这几个类型都有哪几个参数需要显示
|
2026-09-28 15:28:50 +08:00
|
|
|
|
static DWORD GetCheckFlag(AryEtype &aryType, AryEShowItem &aryShowItem);
|
|
|
|
|
|
static void SetParamFlag(DWORD &dwFlag, int eItem, BOOL bCheck);
|
|
|
|
|
|
static BOOL CheckParamFlag(DWORD &dwFlag, int eItem);
|
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
|
static void LoadCurDoorMsg(); //加载当前门窗检查中设置的信息,信息从dbf中读出来
|
|
|
|
|
|
void SaveCurDoorMsg(); //保存所需要的参数到DBF中
|
2026-09-28 15:28:50 +08:00
|
|
|
|
protected:
|
|
|
|
|
|
afx_msg void OnDestroy();
|
|
|
|
|
|
|
|
|
|
|
|
afx_msg void OnSelCmbTypeChange();
|
|
|
|
|
|
afx_msg void OnBtnHelpMsg();
|
|
|
|
|
|
afx_msg void OnClickDWG();
|
|
|
|
|
|
afx_msg void OnClickProj();
|
|
|
|
|
|
DECLARE_MESSAGE_MAP()
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
virtual void DoDataExchange(CDataExchange* pDX);
|
|
|
|
|
|
virtual BOOL OnInitDialog();
|
|
|
|
|
|
virtual void OnOK();
|
|
|
|
|
|
virtual void OnCancel();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
BOOL m_bOldCheckDWG;
|
|
|
|
|
|
BOOL m_bOldCheckProj;
|
2026-10-04 00:04:20 +08:00
|
|
|
|
static BOOL m_bCheckCurrDWG; // 检查本图门窗
|
|
|
|
|
|
static BOOL m_bCheckCurrProj; // 检查本工程门窗
|
|
|
|
|
|
static BOOL m_bCheckBlock; // 检查块参照和外部参照
|
|
|
|
|
|
static BOOL m_bCheckText; // 检查门窗文字
|
|
|
|
|
|
static BOOL m_bAccordFloor; // 分楼层显示
|
|
|
|
|
|
static BOOL m_bZoomDoorWin; // 门窗放大显示
|
|
|
|
|
|
static BOOL m_bShowImg; // 显示二维、三维样式
|
2026-09-28 15:28:50 +08:00
|
|
|
|
|
|
|
|
|
|
static CString m_strCurrChose;
|
2026-10-04 00:04:20 +08:00
|
|
|
|
static int m_nCurrSel; // 记录之前的选择
|
2026-09-28 15:28:50 +08:00
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
|
CComboBox m_cmbType; // 门窗类型分类
|
|
|
|
|
|
CListCtrl m_lstParm;// 显示参数
|
2026-09-28 15:28:50 +08:00
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
|
CButton m_btnCheckFloor; // 是否勾选分层显示;
|
|
|
|
|
|
CButton m_btnCheckText; // 检查文字按钮
|
|
|
|
|
|
CButton m_btnCheckBlock; // 检查快按钮
|
|
|
|
|
|
CButton m_btnCheckDWG; // 检查本图
|
|
|
|
|
|
CButton m_btnCheckProj; // 检查本工程
|
|
|
|
|
|
CButton m_btnShowImg; // 显示二维、三维样式。
|
2026-09-28 15:28:50 +08:00
|
|
|
|
|
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 检测某类型门窗的某种属性是否被选择了。
|
2026-09-28 15:28:50 +08:00
|
|
|
|
BOOL IsChecked(EEntType eDoorWinCheckType, EShowItem eItem) const;
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 设置某类型门窗的某种属性被选择与否。
|
|
|
|
|
|
void SetCheck(EEntType eDoorWinCheckType, int eItem/*EDoorWinShowType组合*/, BOOL bCheck);
|
|
|
|
|
|
// 检测某类型门窗的是否包含某种属性。
|
2026-09-28 15:28:50 +08:00
|
|
|
|
BOOL HasShowParam(EEntType eDoorWinCheckType, EShowItem eItem) const;
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 设置某类型门窗包含某种属性。
|
|
|
|
|
|
void SetShowParam(EEntType eDoorWinCheckType, int eItem/*EDoorWinShowType组合*/, BOOL bHas);
|
2026-09-28 15:28:50 +08:00
|
|
|
|
void GetCheckParam(int nSel);
|
|
|
|
|
|
void InitCheckParam(int nSel);
|
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
|
// 显示参数,是否选中
|
|
|
|
|
|
static DWORD m_flagShowParam1[eDoorTypeNum][2]; // 每种类型那些参数是要求选中的
|
|
|
|
|
|
DWORD m_flagShowParam[eDoorTypeNum][2]; // 当前的,用来控制是否保存
|
2026-09-28 15:28:50 +08:00
|
|
|
|
};
|
|
|
|
|
|
};
|