public void buildControlToBin(ref PageArrayBin pageArrayBin, ref SVSerialize serialize) { if (pageArrayBin.pageArray == null) { pageArrayBin.pageArray = new PageBin[SVLimit.MAX_PAGE_NUMBER]; } UInt32 nCount = pageArrayBin.pageCount; PageBin pageBin = pageArrayBin.pageArray[nCount]; pageBin.id = _attrib.id; pageBin.bgSet = _attrib.BackGroundType; pageBin.bgClr = (UInt32)_attrib.BackColor.ToArgb(); pageBin.index = (UInt16)pageArrayBin.pageCount; pageBin.pointAlign = _attrib.IsAlignment; if (pageBin.bgSet == 1) { var address = _attrib.PicIconData.bitmap24Data(this.Width, this.Height); if (address != null) { //背景图标位置 if (_backGroundPicData.ContainsKey(_attrib.PicIconData.ShowName)) { pageBin.bgClr = _backGroundPicData[_attrib.PicIconData.ShowName]; } else { pageBin.bgClr = (UInt32)serialize.ToArray().Length; _backGroundPicData.Add(_attrib.PicIconData.ShowName, pageBin.bgClr); serialize.pack(address); } } } pageArrayBin.pageArray[nCount] = pageBin; //遍历所有子控件 foreach (Control ctrl in this.Controls) { SVInterfaceBuild bin = ctrl as SVInterfaceBuild; if (bin == null) { continue; } bin.buildControlToBin(ref pageArrayBin, ref serialize); } pageArrayBin.pageCount++; }
public void fromBin(PageBin bin, byte[] picBuffer) { if (bin.bgSet == 0) { ///背景颜色显示 this.BackColor = Color.FromArgb((Int32)bin.bgClr); } else { ///背景图片显示 SVPixmapFile file = new SVPixmapFile(); this.BackgroundImage = file.getFromFile(picBuffer, bin.bgClr); } this.ID = bin.id; }
/// <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); } }