public void make(ref PageArrayBin pageArrayBin, ref SVSerialize serialize) { UInt32 pageNum = pageArrayBin.pageCount; UInt32 lineNum = pageArrayBin.pageArray[pageNum].lineNum++; if (pageArrayBin.pageArray[pageNum].m_line == null) { pageArrayBin.pageArray[pageNum].m_line = new LineBin[SVLimit.PAGE_LINE_MAXNUM]; } LineBin lineBtn = pageArrayBin.pageArray[pageNum].m_line[lineNum]; lineBtn.id = ID; lineBtn.color = (UInt32)LineColor.ToArgb(); lineBtn.width = LineWidth; ///起始坐标 lineBtn.x1 = (UInt16)_startPos.X; lineBtn.y1 = (UInt16)_startPos.Y; ///结束坐标 if (ShowType) { lineBtn.x2 = (UInt16)(lineBtn.x1 + LineLength - 1); lineBtn.y2 = lineBtn.y1; } else { lineBtn.x2 = lineBtn.x1; lineBtn.y2 = (UInt16)(lineBtn.y1 + LineLength - 1); } pageArrayBin.pageArray[pageNum].m_line[lineNum] = lineBtn; }
public void fromBin(LineBin bin) { this.IsSimulation = true; this.BackColor = Color.FromArgb((Int32)bin.color); this.Location = new Point(bin.x1, bin.y1); this.Width = (bin.x2 - bin.x1); this.Height = (bin.y2 - bin.y1); }
/// <summary> /// 解析数据将布局当前所有控件 /// </summary> /// <param Name="bin">二进制数据</param> /// <param Name="isFirst">是否为其实页面 true表示起始页面</param> void fromPageBin(PageBin bin, Boolean isFirst) { SVSPage page = new SVSPage(); page.fromBin(bin, picBuffer); ///标题栏高度 Int32 titleHeight = this.Height - this.ClientRectangle.Height; ///设置窗口起始位置和宽高尺寸 this.Size = new Size(page.Attrib.Width + 200, page.Attrib.Height + titleHeight); page.Size = this.Size; ///设置控件显示尺寸 mainPanel.Location = new Point(0, 0); mainPanel.Size = new Size(page.Attrib.Width, page.Attrib.Height); ///设置数据显示 dataPanel.Location = new Point(mainPanel.Location.X + mainPanel.Width, mainPanel.Location.Y); dataPanel.Size = new Size(200, mainPanel.Height); page.Paint += new PaintEventHandler((sender, e) => { for (int i = 0; i < bin.lineNum; i++) { LineBin lineBin = bin.m_line[i]; Graphics gh = e.Graphics; Color lineColor = Color.FromArgb((Int32)lineBin.color); SolidBrush brush = new SolidBrush(lineColor); Pen pen = new Pen(brush, lineBin.width); gh.DrawLine(pen, lineBin.x1, lineBin.y1, lineBin.x2, lineBin.y2); } }); //添加ID和页面的映射关系 pageDict.Add(page.ID, page); for (int i = 0; i < bin.btnNum; i++) { SVSButton button = new SVSButton(); button.fromBin(bin.m_btn[i], picBuffer); page.Controls.Add(button); ButtonBin bbb = bin.m_btn[i]; button.Click += new EventHandler((sender, e) => { UInt16 id = (UInt16)(bbb.param.pageId); if (pageDict.ContainsKey(id)) { SVSPage vPage = pageDict[id]; this.mainPanel.Controls.Clear(); this.mainPanel.Controls.Add(vPage); } }); } ///添加所有的模拟量控件 for (int i = 0; i < bin.analog_num; i++) { SVSAnalog analog = new SVSAnalog(_timer); analog.fromBin(bin.m_analog[i]); page.Controls.Add(analog); analog.MouseDown += new MouseEventHandler((sender, e) => { this.dataPanel.Controls.Clear(); this.dataPanel.Controls.Add(analog.DataControl); }); } ///添加所有开关量控件 for (int i = 0; i < bin.binaryNum; i++) { SVSBinary binary = new SVSBinary(_timer); binary.fromBin(bin.m_binary[i], picBuffer); page.Controls.Add(binary); binary.MouseDown += new MouseEventHandler((sender, e) => { this.dataPanel.Controls.Clear(); this.dataPanel.Controls.Add(binary.DataControl); }); } for (int i = 0; i < bin.trendChartNum; i++) { SVSCurve curve = new SVSCurve(); curve.fromBin(bin.m_trendChart[i]); page.Controls.Add(curve); } for (int i = 0; i < bin.gif_num; i++) { SVSGif gif = new SVSGif(_timer); gif.fromBin(bin.m_gif[i], picBuffer); page.Controls.Add(gif); } for (int i = 0; i < bin.iconNum; i++) { SVSIcon icon = new SVSIcon(); icon.fromBin(bin.m_icon[i], picBuffer); page.Controls.Add(icon); } for (int i = 0; i < bin.areaNum; i++) { SVSLabel label = new SVSLabel(); label.fromBin(bin.m_area[i]); page.Controls.Add(label); } for (int i = 0; i < bin.tickNum; i++) { SVSHeartBeat heart = new SVSHeartBeat(_timer); heart.fromBin(bin.m_tick[i], picBuffer); page.Controls.Add(heart); heart.MouseDown += new MouseEventHandler((sender, e) => { this.dataPanel.Controls.Clear(); this.dataPanel.Controls.Add(heart.DataControl); }); } if (isFirst) { this.mainPanel.Controls.Clear(); this.mainPanel.Controls.Add(page); } }