QuakeGod
2022-05-27 b978bfa096fdde06a7659838cf81ed4477777737
提交 | 用户 | age
0ed438 1 
Q 2 // MultiTerminal2View.h: CMTerm2View 类的接口
3 //
4
5 #pragma once
6
0a20f7 7 #include <memory>
Q 8 #include <vector>
0ed438 9
0a20f7 10 #include "MTerm2Doc.h"
0ed438 11 class CMTerm2View : public CScrollView
Q 12 {
13 protected: // 仅从序列化创建
14     CMTerm2View() noexcept;
15     DECLARE_DYNCREATE(CMTerm2View)
16
17 // 特性
18 public:
b978bf 19     CStatusBar * m_pStatusBar;
0ed438 20     CMTerm2Doc* GetDocument() const;
Q 21
22     //从文档获取程序
23
24     //文档变动通知
25     enum enCellType{
26         typeNone=0,
27         typeLine1=1, //横线
28         typeLine2,     //竖线
29         typeLine3,
30         typeLine4,
31         typeLine5,
32         typeLine6,
33         typeLine7,
34         typeLine8,
35         typeLine9,
36         typeLine10,
37         typeLine11,
38
39         typeNO=12,
40         typeNC=13,
41         typePP=14,  //上升沿
42         typePN=15,  //下降沿
43         typeNOT=16,
44         typeDF = 17,
45         typeDF_ = 18, 
46         typeOUT=19,
47         typeSET=20,
48         typeRESET=21,
49
50         typeCMP,
51         typeExt1,        //被前面的指令占用的空间
52         typeExt2,
53         typeExt3,
54
55         typeTM=30,        //定时器
56         typeFN1=40,        //1个参数的函数
57         typeFN2=50,        //2个参数的函数
58         typeFN3=60,        //3个参数的函数
59
60         typeCoil=99,
61
62     };
63     struct stCell
64     {
65         int nType;
66         int nProgStep;
67         int bFocused = 0;
68         int bSelected = 0;
69         int bEditing = 0;
70         int bModified = 0;
0a20f7 71
Q 72         int bErrFocus = 0;
73
0ed438 74         int bLeftLineUp = 0;
Q 75         int bLeftLineDn = 0;
76         int nStat = 0;
77         int nTrace = 0;
78         int nDataWidth = 0;
79         int nDataType=0;
80         int nDataAddr=0;
81         CString sParam;
82         CString sCoilName;
83         void clear() { 
84             nType = 0; bFocused = 0; bSelected = 0; bEditing = 0; bModified = 0;
85             bLeftLineUp = 0; bLeftLineDn = 0; nStat = 0;
86             nDataWidth = 0; nDataType = 0; nDataAddr = 0;
87             sParam.Empty(); sCoilName.Empty();
88         }
89     };
90     stCell Cells[2000][16] = { 0 };
0a20f7 91
Q 92     struct stProgSection
93     {
94         std::vector <CMTerm2Doc::stProg> Progs;
95         int Append(CMTerm2Doc::stProg prog)    {
96             Progs.push_back(prog);
97             return 0;
98         };
99         int Append(struct stProgSection progsec){
65f713 100             int n=(int)progsec.Progs.size();
0a20f7 101             for (int i = 0; i < n; i++) {
Q 102                 Progs.push_back(progsec.Progs[i]);
103             }
104             return 0;
105         };
106         int operator+=(const struct stProgSection progsec) { 
107             Append(progsec);
108             return 0; 
109         };
110
111         int Insert(CMTerm2Doc::stProg prog)    {
112             Progs.insert(Progs.begin(), prog);
113             return 0;
114         }
115     };
116
0ed438 117     int m_nTotalRow=0;
Q 118     bool m_bMonitoring = false;        //监控中
119     bool m_bShowComments = true;    //显示注释
120
121     bool m_bEditing = false;
122
123     int m_TopMargin = 0;        
124     int m_LeftMargin = 54;        //左侧边距
125     int m_CellPerLine = 16;        //每行单元数
126     int m_CellWidth = 64;        //单元宽度
127     int m_CellHeight = 28;        //单元高度
128     int m_CommentHeight = 32;    //注释高度
129
130     int m_LinePosY = 20;        //元件显示位置
131
132     int m_FocusRow = 0;             //焦点行列位置
133     int m_FocusCol = 0;
134     int m_oldFocusRow = 0;
135     int m_oldFocusCol = 0;
136     int m_nCurProgStep = 0;
137     int m_TextFontSize=13;
138     int m_nAnnoFontSize=12;
139
140     int m_bModified = 1;
141
142     COLORREF BkColor = RGB(255,255,255);        //Cell背景颜色
143     COLORREF BkEditColor = RGB(192, 192, 192);    //Editing Cell 背景颜色
144
145     COLORREF TextColor =RGB(0,0,0);
146     COLORREF FocusColor = RGB(128,255,128);
147     COLORREF SelectedColor;
148     COLORREF EditColor;
149     COLORREF AnnoColor = RGB(0,0,255);
150     COLORREF BlockAnnoColor;
151     COLORREF MonCoilColor= RGB(0,255,255);
152     COLORREF MonTextColor = RGB(0, 128, 255);
153
154     COLORREF TraceBkColor = RGB(204,204,204);
155     COLORREF TraceColor = RGB(0,255,255);
156     COLORREF ForceIOColor;
157
158     COLORREF OnlineColor = RGB(0, 255, 255);
159     COLORREF ProgColor = RGB(0, 255, 0);
160     COLORREF RunningColor = RGB(0, 255, 0);
161     COLORREF MonitorColor = RGB(0, 255, 255);
162     COLORREF AddressColor = RGB(0, 255, 255);
163
164     CFont TextFont;
165 //    CFont * pOldFont;
166     CFont MonTextFont;
167     CFont AnnoFont;
168
169
170     enum StatusBarIndicators {
171         idxMachineType = 0,
172         idxProgPos = 1,
173         idxOnline = 2,
174         idxRunning = 3,
175         idxMonitor = 4,
176         idxAddress = 5,
177         idxInfoDisp = 6,
178     };
179
180 //    CBrush brBkColor(BkColor);
181
182
183 // 操作
184 public:
185     void DrawFocusRect(CDC* pDC);
186     int DrawLeftRightLine(CDC* pDC, int x0, int y0, int size1=16, int size2=12);
187     void DrawRelay(CDC* pDC, int x0, int y0);
188     int DrawBracket(CDC* pDC, int x0, int y0, int sizex, int sty=0, int sizey = 24);
189     int DrawAngleBracket(CDC* pDC, int x0, int y0, int sizex, int size2);
190     void DrawOT(CDC* pDC, int x0, int y0);
191
192     int DrawCellStat1(CDC * pDC, int x1, int y1, int sizex, int sizey, int nStat);
193     int DrawCellStat2(CDC* pDC, int x1, int y1, int sizex, int sizey, int nStat);
194     int DrawCellText1(CDC* pDC, CString sText, int x1, int y1, int sizex, int sizey, int nFormat=0);
195     int DrawCellText2(CDC* pDC, CString sText, int x1, int y1, int sizex, int sizey, int nFormat, int nTextColor);
196     int DrawCellAnno(CDC * pDC, int nRow, int nCol, CString sAnno);
197
198     void DrawCell(CDC* pDC, int nRow, int nCol);
199     int TransProgToLDS();
200     int needReDraw = 1;
201
202     int DoReDraw();
203     int DrawLDSGraph(CDC* pDC);
204
0a20f7 205     int ScrollToCell(int nRow, int nCol);
Q 206
207     int ScrollCellIntoView(int nRow, int nCol);
208     int isCellInView(int nRow, int nCol);
209
0ed438 210 // 重写
Q 211 public:
212     virtual void OnDraw(CDC* pDC);  // 重写以绘制该视图
213     virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
214 protected:
215     virtual void OnInitialUpdate(); // 构造后第一次调用
216     virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
217     virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
218     virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
219
220 // 实现
221 public:
222     virtual ~CMTerm2View();
223 #ifdef _DEBUG
224     virtual void AssertValid() const;
225     virtual void Dump(CDumpContext& dc) const;
226
227 #endif
228
229 protected:
230
231 // 生成的消息映射函数
232 protected:
233     DECLARE_MESSAGE_MAP()
234 public:
235     afx_msg void OnMonitor();
236     afx_msg void OnUpdateMonitor(CCmdUI *pCmdUI);
237     afx_msg void OnProgConvert();
238     afx_msg void OnUpdateProgConvert(CCmdUI *pCmdUI);
239     afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
240     afx_msg void OnRectSelect();
241     afx_msg void OnUpdateRectSelect(CCmdUI *pCmdUI);
242     afx_msg void OnTextFirst();
243     afx_msg void OnUpdateTextFirst(CCmdUI *pCmdUI);
244     afx_msg void OnInsertBlankLine();
245     afx_msg void OnUpdateInsertBlankLine(CCmdUI *pCmdUI);
246     afx_msg void OnDeleteBlankLine();
247     afx_msg void OnUpdateDeleteBlankLine(CCmdUI *pCmdUI);
248     afx_msg void OnDisplayComments();
249     afx_msg void OnUpdateDisplayComments(CCmdUI *pCmdUI);
250
251     afx_msg void OnUpdateMachineType(CCmdUI *pCmdUI);
252     afx_msg void OnUpdateProgramPos(CCmdUI *pCmdUI);
253     afx_msg void OnUpdateConnectivity(CCmdUI *pCmdUI);
254     afx_msg void OnUpdateRunStatus(CCmdUI *pCmdUI);
255     afx_msg void OnUpdateMonitorStatus(CCmdUI *pCmdUI);
256     afx_msg void OnUpdateTargetAddress(CCmdUI *pCmdUI);
257
258     int UpdateStatusBar(int nIndex=-1);
259
260     virtual void OnUpdate(CView* /*pSender*/, LPARAM /*lHint*/, CObject* /*pHint*/);
261     afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
262     afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
263     afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
264     afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
265     afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
266
267     afx_msg void OnIndicatorMonitorStatus();
268     afx_msg void OnUpdateIndicators(CCmdUI *pCmdUI);
269
270     afx_msg void OnUpdateIndicatorMonitorStatus(CCmdUI *pCmdUI);
271     afx_msg void OnTimer(UINT_PTR nIDEvent);
272     afx_msg BOOL OnEraseBkgnd(CDC* pDC);
273     afx_msg void OnSize(UINT nType, int cx, int cy);
274     virtual BOOL OnScrollBy(CSize sizeScroll, BOOL bDoScroll = TRUE);
275
276     afx_msg void OnContextMenu(CWnd* /*pWnd*/, CPoint /*point*/);
277     afx_msg void OnProgCancelEdit();
278     afx_msg void OnUpdateProgCancelEdit(CCmdUI *pCmdUI);
279     afx_msg void OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu);
280     int TransLDSToProg();
281     afx_msg void OnInputIoComment();
282     afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
0a20f7 283     int ScanLDSCells(int nStartLine, int nEndLine, int nPosY, int nPosX, int nLevel, stProgSection & progsec, CString & sProgSec, int &nSteps);
0ed438 284 };
Q 285
286 #ifndef _DEBUG  // MultiTerminal2View.cpp 中的调试版本
287 inline CMTerm2Doc* CMTerm2View::GetDocument() const
288    { return reinterpret_cast<CMTerm2Doc*>(m_pDocument); }
289 #endif
290