我使用GDI+制作绘图板,需要在绘图区添加网格线(辅助线),像在photoshop中一样,应该怎样实现?
解决方案 »
- 怎么弄出0.0000E+00的格式?
- 谁有比较完善好用的OA办公系统
- 怎样让图表的scale为整数?怎样去掉鼠标的提示?谢谢
- POST数据如何判断登陆成功
- 急急~!!!!windows服务程序怎么调用我写好的控制台程序啊?在线等!!!
- 如何读取XML文件中的属性名称和它的值?
- winform 中datagrid 如何插入行
- C# 状态栏控件 System.ArgumentOutOfRangeException
- 有关C#的票据套打问题,请高手指教
- 跪求!!定时运行程序!
- 关于网页中使用windows窗体控件,控件上再次调用自定义控件的问题。
- 求c# html或 word 转换成pdf项目的源代码,谢谢!!
for(int i = 0;i<10;i++)
for(int j = 0;j<10;j++)
g.drawLine (两个点);这样就ok了。、、
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
ControlPaint.DrawGrid(e.Graphics, this.ClientRectangle, new Size(8, 8), Color.White);
}
绘制了一个坐标轴,网络线等。 #region 绘图方法 private void panRight_Paint(object sender, PaintEventArgs e)
{
//手工绘制坐标轴
if (backgroundBuffer == null)
{
Rectangle rect = e.ClipRectangle;
BufferedGraphicsContext currentContext = BufferedGraphicsManager.Current;
backgroundBuffer = currentContext.Allocate(e.Graphics, e.ClipRectangle);
backgroundBuffer.Graphics.SmoothingMode = SmoothingMode.HighQuality;
backgroundBuffer.Graphics.PixelOffsetMode = PixelOffsetMode.HighSpeed; Graphics gBG = backgroundBuffer.Graphics;
gBG.Clear(Color.White);
drawAXIS(gBG); //绘制坐标轴
drawTEXTRefLine(gBG); //绘制坐标轴文字
} if (backBuffer == null)
{
Rectangle rect = e.ClipRectangle;
BufferedGraphicsContext currentContext = BufferedGraphicsManager.Current;
backBuffer = currentContext.Allocate(e.Graphics, e.ClipRectangle);
backBuffer.Graphics.SmoothingMode = SmoothingMode.HighQuality;
backBuffer.Graphics.PixelOffsetMode = PixelOffsetMode.HighSpeed;
}
//用背景缓冲区渲染双缓冲
backgroundBuffer.Render(backBuffer.Graphics); Graphics g = backBuffer.Graphics; drawSW(g); //绘制方波
drawFrame(g); //绘制拖放时的边框
backBuffer.Render(e.Graphics); //双缓冲防闪烁(暂时未达到效果)
}
private void drawFrame(Graphics g)
{
if (DragMode != SW.CPos.Other)
{
Pen p = new Pen(Color.Gray, 1);
p.DashPattern = new float[] { 1, 1 }; if (DragMode == SW.CPos.Top)
{
//
g.DrawLine(p, new Point(0, this.HFramePos), new Point(panRight.Width, this.HFramePos));
}
else //水平拖放
{
g.DrawLine(p, new Point(this.VFramePos, 0), new Point(this.VFramePos, panRight.Height)); }
}
}
private void drawAXIS(Graphics g)
{
Pen p = new Pen(Color.Black, 3); //创建绘制画笔 g.DrawLine(p, new Point(opX, opY), new Point(opX + dX * cX, opY)); //画出X轴 g.DrawLine(p, new Point(opX, opY), new Point(opX, opY - dY * cY)); //画出Y轴
} private void drawTEXTRefLine(Graphics g)
{
SolidBrush sbX = new SolidBrush(Color.Blue);
SolidBrush sbY = new SolidBrush(Color.Green); Pen pRefX = new Pen(Color.Blue);
pRefX.DashPattern = new float[] { 2, 1 }; Pen pRefY = new Pen(Color.Green);
pRefY.DashPattern = new float[] { 2, 1 }; for (int i = 0; i < cX; i++)
{
//输出坐标标注
Point outputPos = new Point(opX + dX * i, opY + 5);
g.DrawString(i.ToString(), new Font("Tahoma", 9), sbX, outputPos); //绘制相应参考线
if (i > 0)
{
Point pS = new Point(opX + dX * i, opY);
Point pE = new Point(opX + dX * i, opY - dY * cY); g.DrawLine(pRefX, pS, pE);
}
} for (int i = 0; i < cY; i++)
{ Point outputPos = new Point(opX - 25, opY - dY * i);
g.DrawString(i.ToString(), new Font("Tahoma", 9), sbY, outputPos); if (i > 0)
{
Point pS = new Point(opX, opY - dY * i);
Point pE = new Point(opX + dX * cX, opY - dY * i); g.DrawLine(pRefY, pS, pE);
}
}
} private void drawSW(Graphics g)
{
//绘制笔
Pen p = new Pen(Color.Red, 2);
//方波区域对角点坐标
Point LeftTop = new Point(swMain.Left, swMain.Top);
Point LeftBottom = new Point(swMain.Left, swMain.Top + swMain.Height); Point RightTop = new Point(swMain.Left + swMain.Width, swMain.Top);
Point RightBottom = new Point(swMain.Left + swMain.Width, swMain.Top + swMain.Height); //绘制左侧线
g.DrawLine(p, LeftTop, LeftBottom); //绘制右侧线
g.DrawLine(p, RightTop, RightBottom); //绘制顶部线
g.DrawLine(p, LeftTop, RightTop);
}
#endregion