矩形框是鼠标随意拖拽的数量不定!数字是自己用ps,画上去的!!呵呵,献丑了!
这种情况,程序里做了限定,子矩形不会大于父矩形!!!
这种情况,还没有什么好的处理方法呢,大家也可以提供个思路!!!
拖拽画的矩形而且位置不定的,都是一层套一层的!有可能先画小矩形,然后再画大的矩形!也有可能先画大矩形再画小的矩形!如何给矩形分层次啊!数字是层次,让程序分出来,矩形框,是一层包着一层的实现无限的分级!!
win的程序!!
把画出来的矩形的长[加上负数]作为当前矩形的立体高度, 矩形越大,负数矩形的长度值越小,高度就越低,自然就排列在下面一层一层。
C#使用GDI+的话,接收一个画矩形l的队列,重新封装画矩形的方法增加层次参数,层高的后画。坐标轴你可以先绘制在一个底图上,每次贴图,或是每次clear后重绘。
参考资料:http://topic.csdn.net/u/20100910/15/d74f4c8d-5ca1-4d24-9005-3aca5842bb45.html
参考代码:
其实这个程序完全重画也不会很慢的,我给你改了下: C# code using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; namespace Paint { public partial class Form1 : Form { public Form1() { InitializeComponent(); } int x1=10; int max = 600; public void GrahpicsUpdate(Graphics graphics) { Pen mypen = new Pen(Color.Black); Pen mypen1 = new Pen(Color.Red); System.Drawing.Font font = new System.Drawing.Font("Arial", 8, FontStyle.Regular); graphics.DrawLine(mypen, 0, 192, 700, 192); String[] n = { "0%", "10%", "20%", "30%", "40%", "50%", "60%", "70%", "80%", "90%", "100%" }; int xstart = 10; for (int i = 0; i < 11; i++) { graphics.DrawString(n[i].ToString(), font, Brushes.DarkGray, xstart - 7, 192);//.Red int Xmin = xstart; for (int j = 0; j < 9; j++) { Xmin += 6; if (j == 4) graphics.DrawLine(mypen, Xmin, 184, Xmin, 192); else graphics.DrawLine(mypen, Xmin, 188, Xmin, 192); } graphics.DrawLine(mypen, xstart, 182, xstart, 192); xstart = xstart + 60; } graphics.DrawLine(mypen1, x1, 180, x1, 200); } private void groupBox2_Paint(object sender, PaintEventArgs e) { GrahpicsUpdate(e.Graphics); } private void textBox5_TextChanged(object sender, EventArgs e) { double d = Convert.ToDouble(textBoxPresentVal.Text); x1 = (int)(d / 100 * max)+10; groupBox1.Invalidate(); //这里可以传入要更新的区域,不过我觉得没有必要,反而破坏了算法的简洁性,如果不是刻意地追求效率 } } }
单次添加的时候并没有什么问题。可以在添加矩形的时候自己算应该在谁的子矩形或者自己是父矩形。
大家帮忙想下,在最后都绘制完成的时候,应该会有一部验证分层的函数!!这个函数怎么写啊!!
我想了一下: