From d34256830982fb9ea822c1e9b874c3b7fa0a614d Mon Sep 17 00:00:00 2001
From: zxd <zxdvslxy@gmail.com>
Date: 星期四, 14 九月 2023 18:31:26 +0800
Subject: [PATCH] Modify(包含部分测试代码) 1.添加注释 2.ins按钮功能

---
 MTerm1/MTerm1View.cpp | 1138 ++++++++++++++++++++++++++++++++---------------------------
 1 files changed, 624 insertions(+), 514 deletions(-)

diff --git a/MTerm1/MTerm1View.cpp b/MTerm1/MTerm1View.cpp
index a34e24c..3e2dbf9 100644
--- a/MTerm1/MTerm1View.cpp
+++ b/MTerm1/MTerm1View.cpp
@@ -28,6 +28,10 @@
 
 IMPLEMENT_DYNCREATE(CMTerm1View, CScrollView)
 
+/// <summary>
+/// 娑堟伅鏄犲皠
+/// 鏄� MFC 涓敤浜庡皢 Windows 娑堟伅锛堝榧犳爣鐐瑰嚮銆佹寜閿瓑锛夋槧灏勫埌鎴愬憳鍑芥暟鐨勬満鍒躲��
+/// </summary>
 BEGIN_MESSAGE_MAP(CMTerm1View, CScrollView)
 	// 鏍囧噯鎵撳嵃鍛戒护
 	ON_COMMAND(ID_FILE_PRINT, &CScrollView::OnFilePrint)
@@ -102,19 +106,31 @@
 	return CScrollView::PreCreateWindow(cs);
 }
 
+/// <summary>
+///  MFC 涓殑涓�涓嚱鏁帮紝瀹冨湪瑙嗗浘棣栨鏄剧ず涔嬪墠琚皟鐢�
+/// </summary>
 void CMTerm1View::OnInitialUpdate()
 {
 	CScrollView::OnInitialUpdate();
+
+	//鍒涘缓浜嗕笁绉嶄笉鍚岀殑瀛椾綋
 	TextFont.CreateFont(13, 0, 0, 0, FW_NORMAL, FALSE, FALSE, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN, _T("瀹嬩綋"));
 	MonTextFont.CreateFont(12, 0, 0, 0, FW_NORMAL, FALSE, FALSE, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN, _T("瀹嬩綋"));
 	AnnoFont.CreateFont(12, 0, 0, 0, FW_NORMAL, FALSE, FALSE, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN, _T("瀹嬩綋"));
+	
+	//鑾峰彇浜嗙姸鎬佹爮鐨勫紩鐢ㄥ苟瀛樺偍鍦� m_pStatusBar 鎴愬憳鍙橀噺涓�
 	m_pStatusBar = ((CChildFrame *)GetParentFrame())->GetStatusBar();
+
 	CSize sizeTotal;
 	// TODO: 璁$畻姝よ鍥剧殑鍚堣澶у皬
 	sizeTotal.cx = m_LeftMargin + m_CellWidth* m_CellPerLine + m_CellWidth *2;
 	sizeTotal.cy = 2000;
+	//璁剧疆浜嗘粴鍔ㄥぇ灏�
 	SetScrollSizes(MM_TEXT, sizeTotal);
-	CString s1;
+
+	CString s1;//娌″暐鐢�
+
+	//璁剧疆浜嗕袱涓畾鏃跺櫒锛屼竴涓棿闅斾负50姣锛屽彟涓�涓负10姣銆�
 	SetTimer(1, 50,NULL);
 	SetTimer(2, 10, NULL);
 
@@ -130,25 +146,27 @@
 		return;
 
 	// TODO: 鍦ㄦ澶勪负鏈満鏁版嵁娣诲姞缁樺埗浠g爜
-	CString s1;
+	CString s1;//娌″暐鐢�
+
 	needReDraw = 1;
 	DrawLDSGraph(pDC);
 	needReDraw = 0;
 }
 
-// CMTerm1View 鎵撳嵃
-
+// CMTerm1View 鎵撳嵃锛孧FC 鍑芥暟锛岀敤浜庡噯澶囨墦鍗般��
 BOOL CMTerm1View::OnPreparePrinting(CPrintInfo* pInfo)
 {
 	// 榛樿鍑嗗
 	return DoPreparePrinting(pInfo);
 }
 
+// MFC 鍑芥暟锛岀敤浜庡湪鎵撳嵃寮�濮嬩箣鍓嶈繘琛屽垵濮嬪寲銆�
 void CMTerm1View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
 {
 	// TODO: 娣诲姞棰濆鐨勬墦鍗板墠杩涜鐨勫垵濮嬪寲杩囩▼
 }
 
+//MFC 鍑芥暟锛岀敤浜庡湪鎵撳嵃缁撴潫鍚庤繘琛屾竻鐞嗐��
 void CMTerm1View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
 {
 	// TODO: 娣诲姞鎵撳嵃鍚庤繘琛岀殑娓呯悊杩囩▼
@@ -158,16 +176,19 @@
 // CMTerm1View 璇婃柇
 
 #ifdef _DEBUG
+//鍑芥暟鐢ㄤ簬楠岃瘉瀵硅薄鐨勬湁鏁堟�с��
 void CMTerm1View::AssertValid() const
 {
 	CScrollView::AssertValid();
-}
+ }
 
+// 鍑芥暟鐢ㄤ簬灏嗗璞$殑鍐呭杞偍鍒版寚瀹氱殑涓婁笅鏂囥��
 void CMTerm1View::Dump(CDumpContext& dc) const
 {
 	CScrollView::Dump(dc);
 }
 
+//鍑芥暟杩斿洖涓庢瑙嗗浘鍏宠仈鐨勬枃妗e璞°��
 CMTerm1Doc* CMTerm1View::GetDocument() const // 闈炶皟璇曠増鏈槸鍐呰仈鐨�
 {
 	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMTerm1Doc)));
@@ -175,6 +196,7 @@
 }
 #endif //_DEBUG
 
+//MFC 鍑芥暟锛岀敤浜庡鐞嗚鍥剧殑鍒涘缓浜嬩欢銆�
 int CMTerm1View::OnCreate(LPCREATESTRUCT lpCreateStruct)
 {
 	if (CScrollView::OnCreate(lpCreateStruct) == -1)
@@ -185,9 +207,13 @@
 	return 0;
 }
 
+/// <summary>
+/// 鐢ㄤ簬閲嶆柊缁樺埗瑙嗗浘銆�
+/// </summary>
+/// <returns></returns>
 int CMTerm1View::DoReDraw()
 {
-	// TODO: 鍦ㄦ澶勬坊鍔犲疄鐜颁唬鐮�.
+
 	CPoint scroll1;
 	scroll1 = this->GetScrollPosition();
 
@@ -210,6 +236,13 @@
 	return 0;
 }
 
+/// <summary>
+/// 婊氬姩鍒扮壒瀹氬崟鍏冩牸
+/// 鍑芥暟鍐呴儴璁$畻浜嗗崟鍏冩牸鐨勬�婚珮搴︼紝鑰冭檻浜嗘槸鍚︽樉绀烘敞閲�
+/// </summary>
+/// <param name="nRow"></param>
+/// <param name="nCol"></param>
+/// <returns></returns>
 int CMTerm1View::ScrollToCell(int nRow, int nCol)
 {
 	int CellTotalHeight = m_CellHeight + (m_bShowComments ? m_CommentHeight : 0);
@@ -227,36 +260,57 @@
 	return 0;
 }
 
+/// <summary>
+/// 婊氬姩鍗曞厓鏍艰繘鍏ヨ鍥撅紙鏈畬鎴愮殑鍔熻兘锛�
+/// </summary>
+/// <param name="nRow"></param>
+/// <param name="nCol"></param>
+/// <returns></returns>
 int CMTerm1View::ScrollCellIntoView(int nRow, int nCol)
 {
 	int CellTotalHeight = m_CellHeight + (m_bShowComments ? m_CommentHeight : 0);
 	return 0;
 }
 
+/// <summary>
+/// 妫�鏌ュ崟鍏冩牸鏄惁鍦ㄨ鍥句腑锛堟湭瀹屾垚鐨勫姛鑳斤級
+/// </summary>
+/// <param name="nRow"></param>
+/// <param name="nCol"></param>
+/// <returns></returns>
 int CMTerm1View::isCellInView(int nRow, int nCol)
 {
 	int CellTotalHeight = m_CellHeight + (m_bShowComments ? m_CommentHeight : 0);
 	return 0;
 }
 
+/// <summary>
+/// 鐢ㄤ簬鍦ㄨ鍥句腑缁樺埗鍥惧舰鐨勪富瑕佸嚱鏁�
+/// </summary>
+/// <param name="pDC">鏂囨。</param>
+/// <returns></returns>
 int CMTerm1View::DrawLDSGraph(CDC* pDC)
 {
 	// TODO: 鍦ㄦ澶勬坊鍔犲疄鐜颁唬鐮�.
-	CString s1;
+	CString s1;//娌″暐鐢�
+
+	//楠岃瘉鏂囨。寮曠敤
 	CMTerm1Doc* pDoc = GetDocument();
 	ASSERT_VALID(pDoc);
 	if (!pDoc)	return false;
+
 	if (m_bMonitoring) {
 		pDoc->DoPLCMonitor();
 	}
+
 	int x1, y1, x2, y2;
 	//	RECT rect1;
 	int CellTotalHeight = m_CellHeight + (m_bShowComments ? m_CommentHeight : 0);
 
 	int nDataType, nDataAddr;
 	int nStat;
-	CBrush br0(BkColor);
-	CBrush br01(BkEditColor);
+	CBrush br0(BkColor);//鑳屾櫙棰滆壊
+	CBrush br01(BkEditColor);//缂栬緫锛堥�変腑锛夌姸鎬佷笅鐨勮儗鏅鑹�
 	int nRow, nCol;
 	CRect rect0;
 	this->GetClientRect(&rect0);
@@ -264,19 +318,26 @@
 	CPoint scroll1;
 	scroll1 = this->GetScrollPosition();
 
-	int nFirstVisibleLine;
-	int nLastVisibleLine;
-
+	int nFirstVisibleLine;//鐢ㄤ簬纭畾鍙琛岃寖鍥�-璧峰浣嶇疆
+	int nLastVisibleLine;//鐢ㄤ簬纭畾鍙琛岃寖鍥�-缁堟浣嶇疆
+	//閫氳繃婊氬姩浣嶇疆鍜岃鍥剧殑楂樺害璁$畻涓婅堪涓や釜鍊�
 	nFirstVisibleLine = (scroll1.y - m_TopMargin) / CellTotalHeight;
 	nLastVisibleLine = (rect0.Height() + scroll1.y - m_TopMargin) / CellTotalHeight + 1;
-	if (nFirstVisibleLine < 0) { nFirstVisibleLine = 0; }
-	if (nLastVisibleLine < 0) { nLastVisibleLine = 0; }
+	if (nFirstVisibleLine < 0) 
+	{
+		nFirstVisibleLine = 0; 
+	}
+	if (nLastVisibleLine < 0)
+	{ 
+		nLastVisibleLine = 0; 
+	}
 
+	//閫夋嫨瀛椾綋
 	CFont *pOldFont;
 	pOldFont = (CFont *)pDC->SelectObject(&TextFont);
-	
 
-	for (int i = nFirstVisibleLine; i < nLastVisibleLine && i < 1000; i++) {
+	for (int i = nFirstVisibleLine; i < nLastVisibleLine && i < 1000; i++) 
+	{
 		// 鐢讳竴琛� 鍗曞厓
 		nRow = i;
 		int x0, y0;
@@ -401,7 +462,6 @@
 	return 0;
 }
 
-
 void  CMTerm1View::DrawFocusRect(CDC* pDC)
 {
 //	DrawCell(pDC, m_oldFocusRow, m_oldFocusCol);
@@ -430,7 +490,6 @@
 //	pDC->SelectObject(poldBrush);
 }
 
-
 int CMTerm1View::DrawLeftRightLine(CDC* pDC, int x0, int y0, int size1, int size2)
 {
 	// TODO: 鍦ㄦ澶勬坊鍔犲疄鐜颁唬鐮�.
@@ -452,7 +511,6 @@
 	pDC->LineTo(x2, y2);
 	return 0;
 }
-
 
 void CMTerm1View::DrawOT(CDC* pDC, int x0, int y0)
 {
@@ -535,6 +593,7 @@
 	pDC->LineTo(x2, y2);
 	return 0;
 }
+
 int CMTerm1View::DrawAngleBracket(CDC* pDC, int x0, int y0, int size1, int size2)
 {
 	// TODO: 鍦ㄦ澶勬坊鍔犲疄鐜颁唬鐮�.
@@ -542,7 +601,7 @@
 	DrawLeftRightLine(pDC, x0, y0, size1, size2);
 	// 宸﹀皷鎷彿
 	x1 = x0 + size1 + 6;
-	y1 = y0 + m_LinePosY -6;
+	y1 = y0 + m_LinePosY -6; 
 	x2 = x1 -6;
 	y2 = y1 +6 ;
 	pDC->MoveTo(x1, y1);
@@ -664,7 +723,7 @@
 	int CellTotalHeight = m_CellHeight + (m_bShowComments ? m_CommentHeight : 0);
 
 	rect1.left = m_LeftMargin + 1 + m_CellWidth * nCol;
-	rect1.right = rect1.left + m_CellWidth;
+	rect1.right = rect1.left + m_CellWidth; 
 	rect1.top = m_TopMargin + CellTotalHeight * nRow;
 	rect1.bottom = rect1.top + CellTotalHeight;
 
@@ -1138,6 +1197,13 @@
 
 	CScrollView::OnKeyDown(nChar, nRepCnt, nFlags);
 }
+
+/// <summary>
+/// 鍗曞厓鏍肩劍鐐瑰彉鍖�*閫変腑鐐瑰彉鍖�
+/// </summary>
+/// <param name="nRow"></param>
+/// <param name="nCol"></param>
+/// <returns></returns>
 int CMTerm1View::CellFocusChg(int nRow, int nCol)
 {
 	CString s1;
@@ -1150,8 +1216,6 @@
 	auto p1 = (CMainFrame*)AfxGetMainWnd();
 	auto p2 = p1->GetInputWnd();
 	p2->SetCurCellPos(nRow,nCol,thecell);
-
-
 
 	return 0;
 }
@@ -1169,10 +1233,21 @@
 	int CellTotalHeight = m_CellHeight + (m_bShowComments ? m_CommentHeight : 0);
 	nRow = (ty - m_TopMargin) / CellTotalHeight;
 	nCol = (tx - m_LeftMargin) / m_CellWidth;
-	if (nRow < 0) { nRow = 0; }
-	if (nCol < 0) { nCol = 0; }
-	if (nCol >= m_CellPerLine) { nCol = m_CellPerLine - 1; }
-	s1.Format(_T("LD %d %d  %02X  Scroll %d %d  Total %d %d Row %d Col %d"), point.x, point.y, nFlags, scroll1.x, scroll1.y, tx, ty, nRow, nCol);
+	if (nRow < 0) 
+	{
+		nRow = 0; 
+	}
+	if (nCol < 0) 
+	{ 
+		nCol = 0; 
+	}
+	if (nCol >= m_CellPerLine) 
+	{
+		nCol = m_CellPerLine - 1; 
+	}
+	s1.Format(_T("OnLButtonDown::zxd:: LD %d %d  %02X  Scroll %d %d  Total %d %d Row %d Col %d"), point.x, point.y, nFlags, scroll1.x, scroll1.y, tx, ty, nRow, nCol);
+	DbgLog(s1);//zxd add to test
+
 	m_pStatusBar->SetPaneText(6, s1);
 	m_FocusRow = nRow;
 	m_FocusCol = nCol;
@@ -1800,7 +1875,10 @@
 	}
 }
 
-
+/// <summary>
+/// 绋嬪簭鏁版嵁杞负姊舰鍥�
+/// </summary>
+/// <returns></returns>
 int CMTerm1View::TransProgToLDS()
 {
 	CString s1;
@@ -1826,518 +1904,526 @@
 
 	int cx = 0, cy = 0;
 	int maxy = 0;
-	for (int i = 0; i < pDoc->m_nProgSteps; i++)
+	try
 	{
-		int nOp = pDoc->Progs[i].nOpType1;
-		int nParamCount = pDoc->Progs[i].nParamCount;
-		CStringA OpName;
-		CStringA ShowTxt;
-		pDoc->OpToTxt(nOp, OpName);
-		pDoc->OpToShowTxt(nOp, ShowTxt);
-		int nPairTo = pDoc->Progs[i].PairTo;
-		int nPairOp = 0;
-		if (nPairTo) nPairOp = pDoc->Progs[nPairTo].nOpType1;
-		int nCellType;
-		switch (nOp)
+		for (int i = 0; i < pDoc->m_nProgSteps; i++)
 		{
+			int nOp = pDoc->Progs[i].nOpType1;
+			int nParamCount = pDoc->Progs[i].nParamCount;
+			CStringA OpName;
+			CStringA ShowTxt;
+			pDoc->OpToTxt(nOp, OpName);
+			pDoc->OpToShowTxt(nOp, ShowTxt);
+			int nPairTo = pDoc->Progs[i].PairTo;
+			int nPairOp = 0;
+			if (nPairTo) nPairOp = pDoc->Progs[nPairTo].nOpType1;
+			int nCellType;
+			switch (nOp)
+			{
 
-		case OP_NOP:
-			break;
-		case OP_ST:
-		case OP_ST_:
-			if (i == 0) {
+			case OP_NOP:
+				break;
+			case OP_ST:
+			case OP_ST_:
+				if (i == 0) {
 
-			}
-			else {
-				//璁板綍褰撳墠浣嶇疆 
-				EndPt[nEndPts] = POINT{ cx,cy };
-				nEndPts++;
-				if (nPairOp == OP_ANS) {
-					//缁х画鍓嶈繘				
-					//cx = 0, cy = nCurLine;
-					//cx = StPts[nSts - 1].x;
-					//nCurLine = cy + 1; //鍙﹁捣涓�琛�
-///*				
-					nCurLine=cy;
-					int hasData = 1;
-					while (hasData) {
-						hasData = 0;
-						for (int j = cx +1; j < m_CellPerLine; j++) {
-							if (Cells[nCurLine][j].nType != 0) {
-								nCurLine++; hasData = 1; break;
+				}
+				else {
+					//璁板綍褰撳墠浣嶇疆 
+					EndPt[nEndPts] = POINT{ cx,cy };
+					nEndPts++;
+					if (nPairOp == OP_ANS) {
+						//缁х画鍓嶈繘				
+						//cx = 0, cy = nCurLine;
+						//cx = StPts[nSts - 1].x;
+						//nCurLine = cy + 1; //鍙﹁捣涓�琛�
+	///*				
+						nCurLine = cy;
+						int hasData = 1;
+						while (hasData) {
+							hasData = 0;
+							for (int j = cx + 1; j < m_CellPerLine; j++) {
+								if (Cells[nCurLine][j].nType != 0) {
+									nCurLine++; hasData = 1; break;
+								}
 							}
 						}
+						//					nCurLine = maxy + 1; //鍙﹁捣涓�琛�
+						if (nCurLine > maxy) maxy = nCurLine;
+						for (int j = cy; j < nCurLine; j++) {
+							Cells[j][cx].bLeftLineDn = 1;
+							Cells[j + 1][cx].bLeftLineUp = 1;
+						}
+						cy = nCurLine;
+						//*/
 					}
-					//					nCurLine = maxy + 1; //鍙﹁捣涓�琛�
-					if (nCurLine > maxy) maxy = nCurLine;
-					for (int j = cy; j < nCurLine; j++) {
-						Cells[j][cx].bLeftLineDn = 1;
-						Cells[j + 1][cx].bLeftLineUp = 1;
-					}
-					cy = nCurLine;
-//*/
-				}
-				else if (nPairOp == OP_ORS) {
-					cx = StPts[nSts - 1].x;
-					nCurLine = cy + 1; //鍙﹁捣涓�琛�
-					int hasData = 1;
-					while (hasData) {
-						hasData = 0;
-						for (int j = cx; j < m_CellPerLine; j++) {
-							if (Cells[nCurLine][j].nType != 0) {
-								nCurLine++; hasData = 1; break;
+					else if (nPairOp == OP_ORS) {
+						cx = StPts[nSts - 1].x;
+						nCurLine = cy + 1; //鍙﹁捣涓�琛�
+						int hasData = 1;
+						while (hasData) {
+							hasData = 0;
+							for (int j = cx; j < m_CellPerLine; j++) {
+								if (Cells[nCurLine][j].nType != 0) {
+									nCurLine++; hasData = 1; break;
+								}
 							}
 						}
+						//					nCurLine = maxy + 1; //鍙﹁捣涓�琛�
+						if (nCurLine > maxy) maxy = nCurLine;
+						for (int j = cy; j < nCurLine; j++) {
+							Cells[j][cx].bLeftLineDn = 1;
+							Cells[j + 1][cx].bLeftLineUp = 1;
+						}
+						cy = nCurLine;
 					}
-					//					nCurLine = maxy + 1; //鍙﹁捣涓�琛�
-					if (nCurLine > maxy) maxy = nCurLine;
-					for (int j = cy; j < nCurLine; j++) {
-						Cells[j][cx].bLeftLineDn = 1;
-						Cells[j + 1][cx].bLeftLineUp = 1;
+					else if (nPairOp == 0) {
+						nCurLine = maxy + 1; //鍙﹁捣涓�琛�
+						maxy = nCurLine;
+						cx = 0; cy = nCurLine;
 					}
-					cy = nCurLine;
 				}
-				else if (nPairOp == 0) {
-					nCurLine = maxy + 1; //鍙﹁捣涓�琛�
-					maxy = nCurLine;
-					cx = 0; cy = nCurLine;
-				}
-			}
-			stpos[nSts] = i;
-			StPts[nSts] = POINT{ cx,cy };
-			nSts++;
-			Cells[cy][cx].nType = pDoc->Progs[i].nOpType1 == OP_ST ? typeNO : typeNC; //typeNC
-			Cells[cy][cx].nProgStep = i;
-			Cells[cy][cx].sCoilName = pDoc->Progs[i].Params[0].sParamStr;
-			Cells[cy][cx].sParam = pDoc->Progs[i].Params[0].sParamStr;
-			Cells[cy][cx].nDataType = pDoc->Progs[i].Params[0].nParamType;
-			Cells[cy][cx].nDataAddr = pDoc->Progs[i].Params[0].nParamAddr;
-			cx++;	//绉诲埌涓嬩竴鏍�
-			break;
-		case OP_ST_EQ:
-		case OP_ST_NE:
-		case OP_ST_LT:
-		case OP_ST_GT:
-		case OP_ST_LE:
-		case OP_ST_GE:
-			if (i == 0) {
+				stpos[nSts] = i;
+				StPts[nSts] = POINT{ cx,cy };
+				nSts++;
+				Cells[cy][cx].nType = pDoc->Progs[i].nOpType1 == OP_ST ? typeNO : typeNC; //typeNC
+				Cells[cy][cx].nProgStep = i;
+				Cells[cy][cx].sCoilName = pDoc->Progs[i].Params[0].sParamStr;
+				Cells[cy][cx].sParam = pDoc->Progs[i].Params[0].sParamStr;
+				Cells[cy][cx].nDataType = pDoc->Progs[i].Params[0].nParamType;
+				Cells[cy][cx].nDataAddr = pDoc->Progs[i].Params[0].nParamAddr;
+				cx++;	//绉诲埌涓嬩竴鏍�
+				break;
+			case OP_ST_EQ:
+			case OP_ST_NE:
+			case OP_ST_LT:
+			case OP_ST_GT:
+			case OP_ST_LE:
+			case OP_ST_GE:
+				if (i == 0) {
 
-			}
-			else {
-				//璁板綍褰撳墠浣嶇疆 
-				EndPt[nEndPts] = POINT{ cx,cy };
-				nEndPts++;
-				if (nPairOp == OP_ANS) {
-					//缁х画鍓嶈繘				
-					//cx = 0, cy = nCurLine;
 				}
-				else if (nPairOp == OP_ORS) {
-					cx = StPts[nSts - 1].x;
-					nCurLine = cy + 1; //鍙﹁捣涓�琛�
-					int hasData = 1;
-					while (hasData) {
-						hasData = 0;
-						for (int j = cx; j < m_CellPerLine; j++) {
-							if (Cells[nCurLine][j].nType != 0) {
-								nCurLine++; hasData = 1; break;
+				else {
+					//璁板綍褰撳墠浣嶇疆 
+					EndPt[nEndPts] = POINT{ cx,cy };
+					nEndPts++;
+					if (nPairOp == OP_ANS) {
+						//缁х画鍓嶈繘				
+						//cx = 0, cy = nCurLine;
+					}
+					else if (nPairOp == OP_ORS) {
+						cx = StPts[nSts - 1].x;
+						nCurLine = cy + 1; //鍙﹁捣涓�琛�
+						int hasData = 1;
+						while (hasData) {
+							hasData = 0;
+							for (int j = cx; j < m_CellPerLine; j++) {
+								if (Cells[nCurLine][j].nType != 0) {
+									nCurLine++; hasData = 1; break;
+								}
 							}
 						}
-					}
-					//					nCurLine = maxy + 1; //鍙﹁捣涓�琛�
-					if (nCurLine > maxy) maxy = nCurLine;
-					for (int j = cy; j < nCurLine; j++) {
-						Cells[j][cx].bLeftLineDn = 1;
-						Cells[j + 1][cx].bLeftLineUp = 1;
-					}
-					cy = nCurLine;
-				}
-				else if (nPairOp == 0) {
-					nCurLine = maxy + 1; //鍙﹁捣涓�琛�
-					maxy = nCurLine;
-					cx = 0; cy = nCurLine;
-				}
-			}
-			stpos[nSts] = i;
-			StPts[nSts] = POINT{ cx,cy };
-			nSts++;
-			Cells[cy][cx].nType = typeCMP;
-			Cells[cy][cx].nProgStep = i;
-			Cells[cy][cx].sParam = OpName;
-			Cells[cy][cx].sCoilName = ShowTxt;
-			Cells[cy][cx + 1].nType = typeExt1;
-			Cells[cy][cx + 1].sParam = pDoc->Progs[i].Params[0].sParamStr;
-			Cells[cy][cx + 1].nDataType = pDoc->Progs[i].Params[0].nParamType;
-			Cells[cy][cx + 1].nDataAddr = pDoc->Progs[i].Params[0].nParamAddr;
-			Cells[cy][cx + 2].nType = typeExt1;
-			Cells[cy][cx + 2].sParam = pDoc->Progs[i].Params[1].sParamStr;
-			Cells[cy][cx + 2].nDataType = pDoc->Progs[i].Params[1].nParamType;
-			Cells[cy][cx + 2].nDataAddr = pDoc->Progs[i].Params[1].nParamAddr;
-			cx += 3;	//绉诲埌涓�3鏍�
-			break;
-
-		case OP_AN:
-		case OP_AN_:
-
-			Cells[cy][cx].nType = nOp == OP_AN ? typeNO : typeNC; //typeNC
-			Cells[cy][cx].nProgStep = i;
-			Cells[cy][cx].sParam = pDoc->Progs[i].Params[0].sParamStr;
-			Cells[cy][cx].sCoilName = pDoc->Progs[i].Params[0].sParamStr;
-			Cells[cy][cx].nDataType = pDoc->Progs[i].Params[0].nParamType;
-			Cells[cy][cx].nDataAddr = pDoc->Progs[i].Params[0].nParamAddr;
-			cx++;
-			break;
-		case OP_AN_EQ:
-		case OP_AN_NE:
-		case OP_AN_LT:
-		case OP_AN_GT:
-		case OP_AN_LE:
-		case OP_AN_GE:
-			Cells[cy][cx].nType = typeCMP;
-			Cells[cy][cx].nProgStep = i;
-			Cells[cy][cx].sCoilName = ShowTxt;
-			Cells[cy][cx + 1].nType = typeExt1;
-			Cells[cy][cx + 1].sParam = pDoc->Progs[i].Params[0].sParamStr;
-			Cells[cy][cx + 1].nDataType = pDoc->Progs[i].Params[0].nParamType;
-			Cells[cy][cx + 1].nDataAddr = pDoc->Progs[i].Params[0].nParamAddr;
-			Cells[cy][cx + 2].nType = typeExt1;
-			Cells[cy][cx + 2].sParam = pDoc->Progs[i].Params[1].sParamStr;
-			Cells[cy][cx + 2].nDataType = pDoc->Progs[i].Params[1].nParamType;
-			Cells[cy][cx + 2].nDataAddr = pDoc->Progs[i].Params[1].nParamAddr;
-			cx += 3;
-			break;
-
-		case OP_OR:
-		case OP_OR_:
-			EndPt[nEndPts] = POINT{ cx,cy };
-			nEndPts++;
-			cx = StPts[nSts - 1].x;
-			nCurLine = cy + 1; //鍙﹁捣涓�琛�
-			{
-				int hasData = 1;
-				while (hasData) {
-					hasData = 0;
-					for (int j = cx; j < m_CellPerLine; j++) {
-						if (Cells[nCurLine][j].nType != 0) {
-							nCurLine++; hasData = 1; break;
+						//					nCurLine = maxy + 1; //鍙﹁捣涓�琛�
+						if (nCurLine > maxy) maxy = nCurLine;
+						for (int j = cy; j < nCurLine; j++) {
+							Cells[j][cx].bLeftLineDn = 1;
+							Cells[j + 1][cx].bLeftLineUp = 1;
 						}
+						cy = nCurLine;
+					}
+					else if (nPairOp == 0) {
+						nCurLine = maxy + 1; //鍙﹁捣涓�琛�
+						maxy = nCurLine;
+						cx = 0; cy = nCurLine;
 					}
 				}
-			}
-			if (nCurLine > maxy)	maxy = nCurLine;
-			for (int j = cy; j < nCurLine; j++) {
-				Cells[j][cx].bLeftLineDn = 1;
-				Cells[j + 1][cx].bLeftLineUp = 1;
-			}
-			cy = nCurLine;
-			Cells[cy][cx].nProgStep = i;
-			Cells[cy][cx].nType = nOp == OP_OR ? typeNO : typeNC; //typeNC
-			Cells[cy][cx].sCoilName = pDoc->Progs[i].Params[0].sParamStr;
-			Cells[cy][cx].sParam = pDoc->Progs[i].Params[0].sParamStr;
-			Cells[cy][cx].nDataType = pDoc->Progs[i].Params[0].nParamType;
-			Cells[cy][cx].nDataAddr = pDoc->Progs[i].Params[0].nParamAddr;
-			cx++;
-			if (cx < EndPt[nEndPts - 1].x)
-			{	//鏈琛ラ綈
-				for (int j = cx; j < EndPt[nEndPts - 1].x; j++)
-				{
-					Cells[cy][j].nType = typeLine1;
-				}
-				cx = EndPt[nEndPts - 1].x;
-			}
-			else {
-				//鍓嶄竴琛岃ˉ榻�
-				for (int j = EndPt[nEndPts - 1].x; j < cx; j++)
-				{
-					Cells[EndPt[nEndPts - 1].y][j].nType = typeLine1;
-				}
+				stpos[nSts] = i;
+				StPts[nSts] = POINT{ cx,cy };
+				nSts++;
+				Cells[cy][cx].nType = typeCMP;
+				Cells[cy][cx].nProgStep = i;
+				Cells[cy][cx].sParam = OpName;
+				Cells[cy][cx].sCoilName = ShowTxt;
+				Cells[cy][cx + 1].nType = typeExt1;
+				Cells[cy][cx + 1].sParam = pDoc->Progs[i].Params[0].sParamStr;
+				Cells[cy][cx + 1].nDataType = pDoc->Progs[i].Params[0].nParamType;
+				Cells[cy][cx + 1].nDataAddr = pDoc->Progs[i].Params[0].nParamAddr;
+				Cells[cy][cx + 2].nType = typeExt1;
+				Cells[cy][cx + 2].sParam = pDoc->Progs[i].Params[1].sParamStr;
+				Cells[cy][cx + 2].nDataType = pDoc->Progs[i].Params[1].nParamType;
+				Cells[cy][cx + 2].nDataAddr = pDoc->Progs[i].Params[1].nParamAddr;
+				cx += 3;	//绉诲埌涓�3鏍�
+				break;
 
-			}
-			//杩炴帴涓婁笅绾�
-			for (int j = EndPt[nEndPts - 1].y; j < cy; j++)
-			{
-				Cells[j][cx].bLeftLineDn = 1;
-				Cells[j + 1][cx].bLeftLineUp = 1;
-			}
-			//鍏夋爣浣嶇疆, 鍓嶄竴缁撴潫鐐逛綅缃�
-			cy = EndPt[nEndPts - 1].y;
-			nEndPts--;
+			case OP_AN:
+			case OP_AN_:
 
-			break;
-		case OP_OR_EQ:
-		case OP_OR_NE:
-		case OP_OR_LT:
-		case OP_OR_GT:
-		case OP_OR_LE:
-		case OP_OR_GE:
-			EndPt[nEndPts] = POINT{ cx,cy };
-			nEndPts++;
-			cx = StPts[nSts - 1].x;
-			nCurLine = cy + 1; //鍙﹁捣涓�琛�
-			{
-				int hasData = 1;
-				while (hasData) {
-					hasData = 0;
-					for (int j = cx; j < m_CellPerLine; j++) {
-						if (Cells[nCurLine][j].nType != 0) {
-							nCurLine++; hasData = 1; break;
-						}
-					}
-				}
-			}
-			if (nCurLine > maxy)	maxy = nCurLine;
-			for (int j = cy; j < nCurLine; j++) {
-				Cells[j][cx].bLeftLineDn = 1;
-				Cells[j + 1][cx].bLeftLineUp = 1;
-			}
-			cy = nCurLine;
-			Cells[cy][cx].nType = typeCMP;
-			Cells[cy][cx].nProgStep = i;
-			Cells[cy][cx].sCoilName = ShowTxt;
-			Cells[cy][cx + 1].nType = typeExt1;
-			Cells[cy][cx + 1].sParam = pDoc->Progs[i].Params[0].sParamStr;
-			Cells[cy][cx + 1].nDataType = pDoc->Progs[i].Params[0].nParamType;
-			Cells[cy][cx + 1].nDataAddr = pDoc->Progs[i].Params[0].nParamAddr;
-			Cells[cy][cx + 2].nType = typeExt1;
-			Cells[cy][cx + 2].sParam = pDoc->Progs[i].Params[1].sParamStr;
-			Cells[cy][cx + 2].nDataType = pDoc->Progs[i].Params[1].nParamType;
-			Cells[cy][cx + 2].nDataAddr = pDoc->Progs[i].Params[1].nParamAddr;
-			cx += 3;
-			if (cx < EndPt[nEndPts - 1].x)
-			{	//鏈琛ラ綈
-				for (int j = cx; j < EndPt[nEndPts - 1].x; j++)
-				{
-					Cells[cy][j].nType = typeLine1;
-				}
-				cx = EndPt[nEndPts - 1].x;
-			}
-			else {
-				//鍓嶄竴琛岃ˉ榻�
-				for (int j = EndPt[nEndPts - 1].x; j < cx; j++)
-				{
-					Cells[EndPt[nEndPts - 1].y][j].nType = typeLine1;
-				}
-
-			}
-			//杩炴帴涓婁笅绾�
-			for (int j = EndPt[nEndPts - 1].y; j < cy; j++)
-			{
-				Cells[j][cx].bLeftLineDn = 1;
-				Cells[j + 1][cx].bLeftLineUp = 1;
-			}
-			//鍏夋爣浣嶇疆, 鍓嶄竴缁撴潫鐐逛綅缃�
-			cy = EndPt[nEndPts - 1].y;
-			nEndPts--;
-
-			break;
-		case OP_NOT:
-			Cells[cy][cx].nType = typeNOT;
-			Cells[cy][cx].sCoilName = _T("NOT");
-
-			Cells[cy][cx].nProgStep = i;
-			cx++;
-			break;
-		case OP_DF:
-		case OP_DF_:
-			Cells[cy][cx].nType = nOp == OP_DF ? typeDF : typeDF_;
-			Cells[cy][cx].sCoilName = nOp == OP_DF ? _T("DF") : _T("DF/");
-
-			Cells[cy][cx].nProgStep = i;
-			cx++;
-			break;
-		case OP_ANS:
-			nSts--;
-			nEndPts--;
-
-			break;
-		case OP_ORS:
-			// 褰撳墠搴忓垪涓庡墠闈㈢殑搴忓垪鍚堝苟銆�
-			//褰撳墠搴忓垪鐨勫紑濮嬬粨鏉熶綅缃�
-			//EndPt[nEndPts] = POINT{ cx,cy };
-			//nEndPts++;
-			//StPts[nSts - 1]; EndPt[nEndPts - 1];
-			//鍓嶄竴搴忓垪鐨勫紑濮嬬粨鏉熶綅缃�
-			StPts[nSts - 1]; EndPt[nEndPts - 1];
-			//鍒ゆ柇浜岃�呴暱搴�
-			if (cx < EndPt[nEndPts - 1].x)
-			{	//鏈琛ラ綈
-				for (int j = cx; j < EndPt[nEndPts - 1].x; j++)
-				{
-					Cells[cy][j].nType = typeLine1;
-				}
-				cx = EndPt[nEndPts - 1].x;
-			}
-			else {
-				//鍓嶄竴琛岃ˉ榻�
-				for (int j = EndPt[nEndPts - 1].x; j < cx; j++)
-				{
-					Cells[EndPt[nEndPts - 1].y][j].nType = typeLine1;
-				}
-
-			}
-			//杩炴帴涓婁笅绾�
-			for (int j = EndPt[nEndPts - 1].y; j < cy; j++)
-			{
-				Cells[j][cx].bLeftLineDn = 1;
-				Cells[j + 1][cx].bLeftLineUp = 1;
-			}
-			//鍏夋爣浣嶇疆, 鍓嶄竴缁撴潫鐐逛綅缃�
-			cy = EndPt[nEndPts - 1].y;
-			nSts--;
-			nEndPts--;
-
-			break;
-		case OP_PSHS:
-			EndPt[nEndPts] = POINT{ cx,cy };
-			nEndPts++;
-			break;
-		case OP_RDS:
-			cx = EndPt[nEndPts - 1].x;
-			for (int j = cx; j < m_CellPerLine; j++) {
-				if (Cells[cy][j].nType != 0)
-				{
-					cy++; j = cx - 1; //break;
-				}
-			}
-			for (int j = EndPt[nEndPts - 1].y; j < cy; j++)
-			{
-				Cells[j][cx].bLeftLineDn = 1;
-				Cells[j + 1][cx].bLeftLineUp = 1;
-			}
-			break;
-		case OP_POPS:
-			cx = EndPt[nEndPts - 1].x;
-			for (int j = cx; j < m_CellPerLine; j++) {
-				if (Cells[cy][j].nType != 0)
-				{
-					cy++; j = cx - 1; break;
-				}
-			}
-			for (int j = EndPt[nEndPts - 1].y; j < cy; j++)
-			{
-				Cells[j][cx].bLeftLineDn = 1;
-				Cells[j + 1][cx].bLeftLineUp = 1;
-			}
-			nEndPts--;
-
-			break;
-		case OP_OUT:
-		case OP_SET:
-		case OP_RESET:
-			nCellType = nOp == OP_OUT ? typeOUT : nOp == OP_SET ? typeSET : typeRESET;
-			nCurLine = cy;
-			if (cx <= m_CellPerLine) {
-
-				int hasData = 1;
-				while (hasData) {
-					hasData = 0;
-					for (int j = cx; j < m_CellPerLine; j++) {
-						if (Cells[nCurLine][j].nType != 0) {
-							nCurLine++; hasData = 1; break;
-						}
-					}
-				}
-				//if (nCurLine > maxy)	maxy = nCurLine;
-				for (int j = cy; j < nCurLine; j++) {
-					Cells[j][cx].bLeftLineDn = 1;
-					Cells[j + 1][cx].bLeftLineUp = 1;
-				}
-				cy = nCurLine;
-				for (int j = cx; j < m_CellPerLine; j++)
-				{
-					Cells[cy][j].nType = typeLine1;
-				}
-				Cells[cy][m_CellPerLine - 1].nType = nCellType;
-				Cells[cy][m_CellPerLine - 1].nProgStep = i;
-				Cells[cy][m_CellPerLine - 1].sParam = pDoc->Progs[i].Params[0].sParamStr;
-				Cells[cy][m_CellPerLine - 1].sCoilName = pDoc->Progs[i].Params[0].sParamStr;
-				Cells[cy][m_CellPerLine - 1].nDataType = pDoc->Progs[i].Params[0].nParamType;
-				Cells[cy][m_CellPerLine - 1].nDataAddr = pDoc->Progs[i].Params[0].nParamAddr;
-				
-			}
-			else {
-				Cells[cy][cx].nType = nCellType;
+				Cells[cy][cx].nType = nOp == OP_AN ? typeNO : typeNC; //typeNC
 				Cells[cy][cx].nProgStep = i;
 				Cells[cy][cx].sParam = pDoc->Progs[i].Params[0].sParamStr;
 				Cells[cy][cx].sCoilName = pDoc->Progs[i].Params[0].sParamStr;
 				Cells[cy][cx].nDataType = pDoc->Progs[i].Params[0].nParamType;
 				Cells[cy][cx].nDataAddr = pDoc->Progs[i].Params[0].nParamAddr;
+				cx++;
+				break;
+			case OP_AN_EQ:
+			case OP_AN_NE:
+			case OP_AN_LT:
+			case OP_AN_GT:
+			case OP_AN_LE:
+			case OP_AN_GE:
+				Cells[cy][cx].nType = typeCMP;
+				Cells[cy][cx].nProgStep = i;
+				Cells[cy][cx].sCoilName = ShowTxt;
+				Cells[cy][cx + 1].nType = typeExt1;
+				Cells[cy][cx + 1].sParam = pDoc->Progs[i].Params[0].sParamStr;
+				Cells[cy][cx + 1].nDataType = pDoc->Progs[i].Params[0].nParamType;
+				Cells[cy][cx + 1].nDataAddr = pDoc->Progs[i].Params[0].nParamAddr;
+				Cells[cy][cx + 2].nType = typeExt1;
+				Cells[cy][cx + 2].sParam = pDoc->Progs[i].Params[1].sParamStr;
+				Cells[cy][cx + 2].nDataType = pDoc->Progs[i].Params[1].nParamType;
+				Cells[cy][cx + 2].nDataAddr = pDoc->Progs[i].Params[1].nParamAddr;
+				cx += 3;
+				break;
+
+			case OP_OR:
+			case OP_OR_:
+				EndPt[nEndPts] = POINT{ cx,cy };
+				nEndPts++;
+				cx = StPts[nSts - 1].x;
+				nCurLine = cy + 1; //鍙﹁捣涓�琛�
+				{
+					int hasData = 1;
+					while (hasData) {
+						hasData = 0;
+						for (int j = cx; j < m_CellPerLine; j++) {
+							if (Cells[nCurLine][j].nType != 0) {
+								nCurLine++; hasData = 1; break;
+							}
+						}
+					}
+				}
+				if (nCurLine > maxy)	maxy = nCurLine;
+				for (int j = cy; j < nCurLine; j++) {
+					Cells[j][cx].bLeftLineDn = 1;
+					Cells[j + 1][cx].bLeftLineUp = 1;
+				}
+				cy = nCurLine;
+				Cells[cy][cx].nProgStep = i;
+				Cells[cy][cx].nType = nOp == OP_OR ? typeNO : typeNC; //typeNC
+				Cells[cy][cx].sCoilName = pDoc->Progs[i].Params[0].sParamStr;
+				Cells[cy][cx].sParam = pDoc->Progs[i].Params[0].sParamStr;
+				Cells[cy][cx].nDataType = pDoc->Progs[i].Params[0].nParamType;
+				Cells[cy][cx].nDataAddr = pDoc->Progs[i].Params[0].nParamAddr;
+				cx++;
+				if (cx < EndPt[nEndPts - 1].x)
+				{	//鏈琛ラ綈
+					for (int j = cx; j < EndPt[nEndPts - 1].x; j++)
+					{
+						Cells[cy][j].nType = typeLine1;
+					}
+					cx = EndPt[nEndPts - 1].x;
+				}
+				else {
+					//鍓嶄竴琛岃ˉ榻�
+					for (int j = EndPt[nEndPts - 1].x; j < cx; j++)
+					{
+						Cells[EndPt[nEndPts - 1].y][j].nType = typeLine1;
+					}
+
+				}
+				//杩炴帴涓婁笅绾�
+				for (int j = EndPt[nEndPts - 1].y; j < cy; j++)
+				{
+					Cells[j][cx].bLeftLineDn = 1;
+					Cells[j + 1][cx].bLeftLineUp = 1;
+				}
+				//鍏夋爣浣嶇疆, 鍓嶄竴缁撴潫鐐逛綅缃�
+				cy = EndPt[nEndPts - 1].y;
+				nEndPts--;
+
+				break;
+			case OP_OR_EQ:
+			case OP_OR_NE:
+			case OP_OR_LT:
+			case OP_OR_GT:
+			case OP_OR_LE:
+			case OP_OR_GE:
+				EndPt[nEndPts] = POINT{ cx,cy };
+				nEndPts++;
+				cx = StPts[nSts - 1].x;
+				nCurLine = cy + 1; //鍙﹁捣涓�琛�
+				{
+					int hasData = 1;
+					while (hasData) {
+						hasData = 0;
+						for (int j = cx; j < m_CellPerLine; j++) {
+							if (Cells[nCurLine][j].nType != 0) {
+								nCurLine++; hasData = 1; break;
+							}
+						}
+					}
+				}
+				if (nCurLine > maxy)	maxy = nCurLine;
+				for (int j = cy; j < nCurLine; j++) {
+					Cells[j][cx].bLeftLineDn = 1;
+					Cells[j + 1][cx].bLeftLineUp = 1;
+				}
+				cy = nCurLine;
+				Cells[cy][cx].nType = typeCMP;
+				Cells[cy][cx].nProgStep = i;
+				Cells[cy][cx].sCoilName = ShowTxt;
+				Cells[cy][cx + 1].nType = typeExt1;
+				Cells[cy][cx + 1].sParam = pDoc->Progs[i].Params[0].sParamStr;
+				Cells[cy][cx + 1].nDataType = pDoc->Progs[i].Params[0].nParamType;
+				Cells[cy][cx + 1].nDataAddr = pDoc->Progs[i].Params[0].nParamAddr;
+				Cells[cy][cx + 2].nType = typeExt1;
+				Cells[cy][cx + 2].sParam = pDoc->Progs[i].Params[1].sParamStr;
+				Cells[cy][cx + 2].nDataType = pDoc->Progs[i].Params[1].nParamType;
+				Cells[cy][cx + 2].nDataAddr = pDoc->Progs[i].Params[1].nParamAddr;
+				cx += 3;
+				if (cx < EndPt[nEndPts - 1].x)
+				{	//鏈琛ラ綈
+					for (int j = cx; j < EndPt[nEndPts - 1].x; j++)
+					{
+						Cells[cy][j].nType = typeLine1;
+					}
+					cx = EndPt[nEndPts - 1].x;
+				}
+				else {
+					//鍓嶄竴琛岃ˉ榻�
+					for (int j = EndPt[nEndPts - 1].x; j < cx; j++)
+					{
+						Cells[EndPt[nEndPts - 1].y][j].nType = typeLine1;
+					}
+
+				}
+				//杩炴帴涓婁笅绾�
+				for (int j = EndPt[nEndPts - 1].y; j < cy; j++)
+				{
+					Cells[j][cx].bLeftLineDn = 1;
+					Cells[j + 1][cx].bLeftLineUp = 1;
+				}
+				//鍏夋爣浣嶇疆, 鍓嶄竴缁撴潫鐐逛綅缃�
+				cy = EndPt[nEndPts - 1].y;
+				nEndPts--;
+
+				break;
+			case OP_NOT:
+				Cells[cy][cx].nType = typeNOT;
+				Cells[cy][cx].sCoilName = _T("NOT");
+
+				Cells[cy][cx].nProgStep = i;
+				cx++;
+				break;
+			case OP_DF:
+			case OP_DF_:
+				Cells[cy][cx].nType = nOp == OP_DF ? typeDF : typeDF_;
+				Cells[cy][cx].sCoilName = nOp == OP_DF ? _T("DF") : _T("DF/");
+
+				Cells[cy][cx].nProgStep = i;
+				cx++;
+				break;
+			case OP_ANS:
+				nSts--;
+				nEndPts--;
+
+				break;
+			case OP_ORS:
+				// 褰撳墠搴忓垪涓庡墠闈㈢殑搴忓垪鍚堝苟銆�
+				//褰撳墠搴忓垪鐨勫紑濮嬬粨鏉熶綅缃�
+				//EndPt[nEndPts] = POINT{ cx,cy };
+				//nEndPts++;
+				//StPts[nSts - 1]; EndPt[nEndPts - 1];
+				//鍓嶄竴搴忓垪鐨勫紑濮嬬粨鏉熶綅缃�
+				StPts[nSts - 1]; EndPt[nEndPts - 1];
+				//鍒ゆ柇浜岃�呴暱搴�
+				if (cx < EndPt[nEndPts - 1].x)
+				{	//鏈琛ラ綈
+					for (int j = cx; j < EndPt[nEndPts - 1].x; j++)
+					{
+						Cells[cy][j].nType = typeLine1;
+					}
+					cx = EndPt[nEndPts - 1].x;
+				}
+				else {
+					//鍓嶄竴琛岃ˉ榻�
+					for (int j = EndPt[nEndPts - 1].x; j < cx; j++)
+					{
+						Cells[EndPt[nEndPts - 1].y][j].nType = typeLine1;
+					}
+
+				}
+				//杩炴帴涓婁笅绾�
+				for (int j = EndPt[nEndPts - 1].y; j < cy; j++)
+				{
+					Cells[j][cx].bLeftLineDn = 1;
+					Cells[j + 1][cx].bLeftLineUp = 1;
+				}
+				//鍏夋爣浣嶇疆, 鍓嶄竴缁撴潫鐐逛綅缃�
+				cy = EndPt[nEndPts - 1].y;
+				nSts--;
+				nEndPts--;
+
+				break;
+			case OP_PSHS:
+				EndPt[nEndPts] = POINT{ cx,cy };
+				nEndPts++;
+				break;
+			case OP_RDS:
+				cx = EndPt[nEndPts - 1].x;
+				for (int j = cx; j < m_CellPerLine; j++) {
+					if (Cells[cy][j].nType != 0)
+					{
+						cy++; j = cx - 1; //break;
+					}
+				}
+				for (int j = EndPt[nEndPts - 1].y; j < cy; j++)
+				{
+					Cells[j][cx].bLeftLineDn = 1;
+					Cells[j + 1][cx].bLeftLineUp = 1;
+				}
+				break;
+			case OP_POPS:
+				cx = EndPt[nEndPts - 1].x;
+				for (int j = cx; j < m_CellPerLine; j++) {
+					if (Cells[cy][j].nType != 0)
+					{
+						cy++; j = cx - 1; break;
+					}
+				}
+				for (int j = EndPt[nEndPts - 1].y; j < cy; j++)
+				{
+					Cells[j][cx].bLeftLineDn = 1;
+					Cells[j + 1][cx].bLeftLineUp = 1;
+				}
+				nEndPts--;
+
+				break;
+			case OP_OUT:
+			case OP_SET:
+			case OP_RESET:
+				nCellType = nOp == OP_OUT ? typeOUT : nOp == OP_SET ? typeSET : typeRESET;
+				nCurLine = cy;
+				if (cx <= m_CellPerLine) {
+
+					int hasData = 1;
+					while (hasData) {
+						hasData = 0;
+						for (int j = cx; j < m_CellPerLine; j++) {
+							if (Cells[nCurLine][j].nType != 0) {
+								nCurLine++; hasData = 1; break;
+							}
+						}
+					}
+					//if (nCurLine > maxy)	maxy = nCurLine;
+					for (int j = cy; j < nCurLine; j++) {
+						Cells[j][cx].bLeftLineDn = 1;
+						Cells[j + 1][cx].bLeftLineUp = 1;
+					}
+					cy = nCurLine;
+					for (int j = cx; j < m_CellPerLine; j++)
+					{
+						Cells[cy][j].nType = typeLine1;
+					}
+					Cells[cy][m_CellPerLine - 1].nType = nCellType;
+					Cells[cy][m_CellPerLine - 1].nProgStep = i;
+					Cells[cy][m_CellPerLine - 1].sParam = pDoc->Progs[i].Params[0].sParamStr;
+					Cells[cy][m_CellPerLine - 1].sCoilName = pDoc->Progs[i].Params[0].sParamStr;
+					Cells[cy][m_CellPerLine - 1].nDataType = pDoc->Progs[i].Params[0].nParamType;
+					Cells[cy][m_CellPerLine - 1].nDataAddr = pDoc->Progs[i].Params[0].nParamAddr;
+
+				}
+				else {
+					Cells[cy][cx].nType = nCellType;
+					Cells[cy][cx].nProgStep = i;
+					Cells[cy][cx].sParam = pDoc->Progs[i].Params[0].sParamStr;
+					Cells[cy][cx].sCoilName = pDoc->Progs[i].Params[0].sParamStr;
+					Cells[cy][cx].nDataType = pDoc->Progs[i].Params[0].nParamType;
+					Cells[cy][cx].nDataAddr = pDoc->Progs[i].Params[0].nParamAddr;
+				}
+				if (cy > maxy) { maxy = cy; }
+				//cy++;
+				break;
+
+			case OP_TML:
+			case OP_TMR:
+			case OP_TMX:
+			case OP_TMY:
+				Cells[cy][cx].nType = typeTM;
+				Cells[cy][cx].nProgStep = i;
+				Cells[cy][cx].sCoilName = ShowTxt;
+				Cells[cy][cx + 1].nType = typeExt1;
+				Cells[cy][cx + 1].sParam = pDoc->Progs[i].Params[0].sParamStr;
+				Cells[cy][cx + 1].nDataType = KLDataTypeEV;
+				Cells[cy][cx + 1].nDataAddr = pDoc->Progs[i].Params[0].nParamAddr;
+				Cells[cy][cx + 2].nType = typeExt1;
+				Cells[cy][cx + 2].sParam = pDoc->Progs[i].Params[1].sParamStr;
+				Cells[cy][cx + 2].nDataType = pDoc->Progs[i].Params[1].nParamType;
+				Cells[cy][cx + 2].nDataAddr = pDoc->Progs[i].Params[1].nParamAddr;
+				cx += 3;
+				break;
+			case OP_INC:
+			case OP_DEC:
+				Cells[cy][cx].nType = typeFN1;
+				Cells[cy][cx].nProgStep = i;
+				Cells[cy][cx].sCoilName = ShowTxt;
+				Cells[cy][cx + 1].nType = typeExt1;
+				Cells[cy][cx + 1].sParam = pDoc->Progs[i].Params[0].sParamStr;
+				Cells[cy][cx + 1].nDataType = pDoc->Progs[i].Params[0].nParamType;
+				Cells[cy][cx + 1].nDataAddr = pDoc->Progs[i].Params[0].nParamAddr;
+				cx += 2;
+				break;
+
+			case OP_MV:
+			case OP_ADD2:
+			case OP_SUB2:
+				Cells[cy][cx].nType = typeFN2;
+				Cells[cy][cx].nProgStep = i;
+				Cells[cy][cx].sCoilName = ShowTxt;
+				Cells[cy][cx + 1].nType = typeExt1;
+				Cells[cy][cx + 1].sParam = pDoc->Progs[i].Params[0].sParamStr;
+				Cells[cy][cx + 1].nDataType = pDoc->Progs[i].Params[0].nParamType;
+				Cells[cy][cx + 1].nDataAddr = pDoc->Progs[i].Params[0].nParamAddr;
+				Cells[cy][cx + 2].nType = typeExt1;
+				Cells[cy][cx + 2].sParam = pDoc->Progs[i].Params[1].sParamStr;
+				Cells[cy][cx + 2].nDataType = pDoc->Progs[i].Params[1].nParamType;
+				Cells[cy][cx + 2].nDataAddr = pDoc->Progs[i].Params[1].nParamAddr;
+				cx += 3;
+				break;
+
+			case OP_ADD3:
+			case OP_SUB3:
+			case OP_MUL:
+			case OP_DIV:
+				Cells[cy][cx].nType = typeFN3;
+				Cells[cy][cx].nProgStep = i;
+				Cells[cy][cx].sCoilName = ShowTxt;
+				Cells[cy][cx + 1].nType = typeExt1;
+				Cells[cy][cx + 1].sParam = pDoc->Progs[i].Params[0].sParamStr;
+				Cells[cy][cx + 1].nDataType = pDoc->Progs[i].Params[0].nParamType;
+				Cells[cy][cx + 1].nDataAddr = pDoc->Progs[i].Params[0].nParamAddr;
+				Cells[cy][cx + 2].nType = typeExt1;
+				Cells[cy][cx + 2].sParam = pDoc->Progs[i].Params[1].sParamStr;
+				Cells[cy][cx + 2].nDataType = pDoc->Progs[i].Params[1].nParamType;
+				Cells[cy][cx + 2].nDataAddr = pDoc->Progs[i].Params[1].nParamAddr;
+				Cells[cy][cx + 3].nType = typeExt1;
+				Cells[cy][cx + 3].sParam = pDoc->Progs[i].Params[2].sParamStr;
+				Cells[cy][cx + 3].nDataType = pDoc->Progs[i].Params[2].nParamType;
+				Cells[cy][cx + 3].nDataAddr = pDoc->Progs[i].Params[2].nParamAddr;
+				cx += 4;
+				break;
+
+			default:
+				break;
 			}
-			if (cy > maxy) { maxy = cy; }
-			//cy++;
-			break;
-
-		case OP_TML:
-		case OP_TMR:
-		case OP_TMX:
-		case OP_TMY:
-			Cells[cy][cx].nType = typeTM;
-			Cells[cy][cx].nProgStep = i;
-			Cells[cy][cx].sCoilName = ShowTxt;
-			Cells[cy][cx + 1].nType = typeExt1;
-			Cells[cy][cx + 1].sParam = pDoc->Progs[i].Params[0].sParamStr;
-			Cells[cy][cx + 1].nDataType = KLDataTypeEV;
-			Cells[cy][cx + 1].nDataAddr = pDoc->Progs[i].Params[0].nParamAddr;
-			Cells[cy][cx + 2].nType = typeExt1;
-			Cells[cy][cx + 2].sParam = pDoc->Progs[i].Params[1].sParamStr;
-			Cells[cy][cx + 2].nDataType = pDoc->Progs[i].Params[1].nParamType;
-			Cells[cy][cx + 2].nDataAddr = pDoc->Progs[i].Params[1].nParamAddr;
-			cx += 3;
-			break;
-		case OP_INC:
-		case OP_DEC:
-			Cells[cy][cx].nType = typeFN1;
-			Cells[cy][cx].nProgStep = i;
-			Cells[cy][cx].sCoilName = ShowTxt;
-			Cells[cy][cx + 1].nType = typeExt1;
-			Cells[cy][cx + 1].sParam = pDoc->Progs[i].Params[0].sParamStr;
-			Cells[cy][cx + 1].nDataType = pDoc->Progs[i].Params[0].nParamType;
-			Cells[cy][cx + 1].nDataAddr = pDoc->Progs[i].Params[0].nParamAddr;
-			cx += 2;
-			break;
-
-		case OP_MV:
-		case OP_ADD2:
-		case OP_SUB2:
-			Cells[cy][cx].nType = typeFN2;
-			Cells[cy][cx].nProgStep = i;
-			Cells[cy][cx].sCoilName = ShowTxt;
-			Cells[cy][cx + 1].nType = typeExt1;
-			Cells[cy][cx + 1].sParam = pDoc->Progs[i].Params[0].sParamStr;
-			Cells[cy][cx + 1].nDataType = pDoc->Progs[i].Params[0].nParamType;
-			Cells[cy][cx + 1].nDataAddr = pDoc->Progs[i].Params[0].nParamAddr;
-			Cells[cy][cx + 2].nType = typeExt1;
-			Cells[cy][cx + 2].sParam = pDoc->Progs[i].Params[1].sParamStr;
-			Cells[cy][cx + 2].nDataType = pDoc->Progs[i].Params[1].nParamType;
-			Cells[cy][cx + 2].nDataAddr = pDoc->Progs[i].Params[1].nParamAddr;
-			cx += 3;
-			break;
-
-		case OP_ADD3:
-		case OP_SUB3:
-		case OP_MUL:
-		case OP_DIV:
-			Cells[cy][cx].nType = typeFN3;
-			Cells[cy][cx].nProgStep = i;
-			Cells[cy][cx].sCoilName = ShowTxt;
-			Cells[cy][cx + 1].nType = typeExt1;
-			Cells[cy][cx + 1].sParam = pDoc->Progs[i].Params[0].sParamStr;
-			Cells[cy][cx + 1].nDataType = pDoc->Progs[i].Params[0].nParamType;
-			Cells[cy][cx + 1].nDataAddr = pDoc->Progs[i].Params[0].nParamAddr;
-			Cells[cy][cx + 2].nType = typeExt1;
-			Cells[cy][cx + 2].sParam = pDoc->Progs[i].Params[1].sParamStr;
-			Cells[cy][cx + 2].nDataType = pDoc->Progs[i].Params[1].nParamType;
-			Cells[cy][cx + 2].nDataAddr = pDoc->Progs[i].Params[1].nParamAddr;
-			Cells[cy][cx + 3].nType = typeExt1;
-			Cells[cy][cx + 3].sParam = pDoc->Progs[i].Params[2].sParamStr;
-			Cells[cy][cx + 3].nDataType = pDoc->Progs[i].Params[2].nParamType;
-			Cells[cy][cx + 3].nDataAddr = pDoc->Progs[i].Params[2].nParamAddr;
-			cx += 4;
-			break;
-
-		default:
-			break;
 		}
 	}
+	catch (const std::exception&)
+	{
+		DbgLog(_T("鏃犳硶缁樺埗鍥惧舰锛堢▼搴忎笉鍚堢悊锛�"));
+	}
+
 	m_nTotalRow = maxy + 1;
 	/*
 		for (int i = 0; i < 25; i++)
@@ -2354,7 +2440,10 @@
 	return 0;
 }
 
-
+/// <summary>
+/// 姊舰鍥捐浆Prog
+/// </summary>
+/// <returns></returns>
 int CMTerm1View::TransLDSToProg()
 {
 	// TODO: 鍦ㄦ澶勬坊鍔犲疄鐜颁唬鐮�.
@@ -2444,11 +2533,15 @@
 			nCurPosY = i;
 			stProgSection thisprogsec;
 			if (Cells[i][0].nType)
-			ScanLDSCells(nStartLine, nEndLine, nCurPosY, nCurPosX, 0, thisprogsec, sProgSec,nSteps);
+			{
+				//寰幆閬嶅巻鍗曞厓鏍�
+				ScanLDSCells(nStartLine, nEndLine, nCurPosY, nCurPosX, 0, thisprogsec, sProgSec, nSteps);
+			}
 			sProg += sProgSec;
 			nAllSteps += nSteps;
 			Progsec += thisprogsec;
 		}
+
 		DbgLog(_T("\r\n")+ sProg);
 		int n = int(Progsec.Progs.size());
 		s1.Format(_T("progSec steps %d "), n);
@@ -2488,6 +2581,19 @@
 	return 0;
 }
 
+
+/// <summary>
+/// 锛氱粯鍒舵瘡涓崟鍏冩牸鐨勫唴瀹�
+/// </summary>
+/// <param name="nStartLine"></param>
+/// <param name="nEndLine"></param>
+/// <param name="nPosY"></param>
+/// <param name="nPosX"></param>
+/// <param name="nLevel"></param>
+/// <param name="progsec"></param>
+/// <param name="sProgSec"></param>
+/// <param name="nSteps"></param>
+/// <returns></returns>
 int CMTerm1View::ScanLDSCells(int nStartLine, int nEndLine, int nPosY, int nPosX, int nLevel, stProgSection & progsec, CString & sProgSec, int &nSteps)
 {
 	// TODO: 鍦ㄦ澶勬坊鍔犲疄鐜颁唬鐮�.
@@ -2506,7 +2612,8 @@
 		CMTerm1Doc::stProg theprog;
 		CStringA sCellNameA;
 		sCellNameA = sCellName;
-		if (nType == typeNO) {
+		if (nType == typeNO) 
+		{
 			if (j==0) {
 				s1.Format(_T("%d %d ST %s"), nCurPosY, nCurPosX,sCellName);
 				sProgSec.AppendFormat(_T("ST %s\r\n"),sCellName);
@@ -2764,7 +2871,10 @@
 					CString ProgSec;
 					int theSteps = 0;
 					stProgSection thisprogsec;
+
+					//
 					int r = ScanLDSCells(nStartLine, nEndLine, nLineTop, j + nNextX, nLevel,thisprogsec, ProgSec,theSteps);
+
 					sProgSec += ProgSec;
 					nSteps += theSteps;
 					progsec += thisprogsec;

--
Gitblit v1.9.1