开发QQ桌球瞄准器(3):绘制瞄准线及母球

 
本节我们介绍如何绘制瞄准线和母球
 
绘制瞄准线
瞄准线的绘制类似于画图程序(windows 的mspaint.exe)的画线功能。当第一次单击鼠标左键的时候定义绘制线段的起点,然后移动鼠标的同时线条会跟随鼠标的移动而增加或减少长度。再次单击鼠标左键完成线条的绘制。与mspaint.exe不同的是,我们绘制线条时不需要按住左键不放。
 
用 GDI+ 绘制线条和形状
继续下面的内容你需要了解一些GDI+绘图的基本知识。GDI+ 使您可以创建图形、绘制文本以及将图形图像作为对象操作。GDI+ 旨在提供较好的性能并且易于使用。可以使用 GDI+ 在 Windows 窗体和控件上呈现图形图像。
用 GDI+ 绘制线条和形状需要先创建 Graphics 对象,然后才可以使用 GDI+ 绘制线条和形状、呈现文本或显示与操作图像。创建Graphics对象的方法有几种方法,我们使用 CreateGraphics 方法来获取对 Graphics 对象的引用。例如,在窗体上绘制一条红色的直线,起点是(10,10)终点是(100,100):
 
绘制线条
 

Graphics g = this.CreateGraphics();
g.DrawLine(Pens.Red, 10, 10, 100, 100);
 

或者这样写
 

// Create pen.
Pen blackPen = new Pen(Color.Red, 3);
 
// Create points that define line.
Point point1 = new Point(10, 10);
Point point2 = new Point(100, 100);
 
// Draw line to screen.
g.Graphics.DrawLine(blackPen, point1, point2);
 

DrawLine方法是绘制一条连接由坐标对指定的两个点的线条。
 
绘制椭圆
 

// Create pen.
Pen blackPen = new Pen(Color.Black, 3);
 
// Create rectangle for ellipse.
Rectangle rect = new Rectangle(0, 0, 200, 100);
 
// Draw ellipse to screen.
e.Graphics.DrawEllipse(blackPen, rect);
 

DrawEllipse方法是绘制一个由边框(该边框由一对坐标、高度和宽度指定)定义的椭圆。当矩形的高度和宽度一致的时候正好是个圆。
 
关于GDI+的更多知识请参考:GDI+图像介绍  http://dev.mjxy.cn/a-GDIplus-Graphics-Introduction.aspx
 
绘制瞄准线
绘制线条

  1. 添加成员变量到Form1类

          public partial class Form1 : Form
          {
               private Graphics g;
               private Point startPoint;           //线条开始坐标
               private Point endPoint;             //线条结束坐标
               private float penWidth = 1;         //线条宽度
               private Color penColor = Color.Red; //绘图颜色
                  …...
           }

  1. 获取Graphics对象的引用

        public Form1()
        {
                 InitializeComponent();
                 //获取Graphics对象的引用
                 g = this.CreateGraphics();
         }

  1. 为Form1窗体添加MouseClick事件

       private void Form1_MouseClick(object sender, MouseEventArgs e)
       {
           //记住线条起点
           startPoint = new Point(e.X, e.Y);
       }
 

  1. 为Form1窗体添加MouseMove事件

     private void Form1_MouseMove(object sender, MouseEventArgs e)
     {
         Point cur_pos = new Point(e.X, e.Y); //鼠标当前位置
         endPoint = cur_pos; //线条结束点是鼠标当前位置           
 
         Pen pen = new Pen(penColor, penWidth); //创建画笔
         g.DrawLine(pen, startPoint, endPoint); //绘制线条
     }
 

  1. 运行程序,如下图所示
          

 
绘制线条的功能已经实现,但是原来绘制的线条并没有擦出,所以出现这种现象。继续修改程序。
 
擦除线条
先擦除之前的线条在画新的线条。修改MouseMove事件中的代码如下:

   private void Form1_MouseMove(object sender, MouseEventArgs e)
   {
       Point cur_pos = new Point(e.X, e.Y); //鼠标当前位置
       Pen pen;       
 
       if (startPoint != endPoint) //擦除:绘制和背景色一样的线条
       {
           pen = new Pen(this.BackColor, penWidth); //使用背景色创建画笔
           g.DrawLine(pen, startPoint, endPoint); //绘制线条
       }
 
    //绘制线条
       pen = new Pen(penColor, penWidth);
       g.DrawLine(pen, startPoint, cur_pos);
 
       endPoint = cur_pos; //线条结束点是鼠标当前位置  
   }
 

 
程序运行如下图所示:
 

 

上图运行的结果正是我们想要的效果。
 
绘制圆形母球
使用Graphics类的DrawEllipse方法绘制圆形,同样的解决方法也是先擦除在绘制。
  1. 为Form1类添加成员变量
  2. private float radius = 10f;
  3. 修改Form1_MouseMove事件代码

Point cur_pos = new Point(e.X, e.Y); //鼠标当前位置
Pen pen;       
if (startPoint != endPoint) //擦除:绘制和背景色一样的线条
{
    pen = new Pen(this.BackColor, penWidth); //使用背景色创建画笔
    g.DrawLine(pen, startPoint, endPoint); //绘制线条
    //绘制母球
    g.DrawEllipse(new Pen(this.BackColor, penWidth), endPoint.X - radius, endPoint.Y - radius, radius * 2, radius * 2);
}
 
//绘制线条
pen = new Pen(penColor, penWidth);
g.DrawLine(pen, startPoint, cur_pos);
//绘制母球
g.DrawEllipse(pen, e.X - radius, e.Y - radius, radius * 2, radius * 2);
 
endPoint = cur_pos; //线条结束点是鼠标当前位置  

 
  1. 运行程序,如下图所示:

 
 
本节内容至此,我们已经完成了桌球瞄准器程序的基本功能,正如你看到的基本功能很容易理解。现在你已经可以试着使用一下我们已经完成的功能了,只是在灵活性上有待改善。这将在后续的步骤中介绍。

代码下载
taiqiu_step3.zip

参考资料
http://dev.mjxy.cn/a-GDIplus-Graphics-Introduction.aspx
http://msdn.microsoft.com/zh-cn/library/system.drawing.graphics(en-us).aspx
http://msdn.microsoft.com/zh-cn/library/system.drawing.pen(en-us).aspx
http://msdn.microsoft.com/zh-cn/library/system.drawing.graphics.drawline(VS.80).aspx
http://msdn.microsoft.com/zh-cn/library/system.drawing.graphics.drawellipse(VS.80).aspx

 

步骤1:桌球瞄准器介绍与使用方法
步骤2:创建项目添加主窗体
步骤3:绘制瞄准线及母球
步骤4:透明度、颜色、线宽与母球大小
步骤5:使用注册表保存配置
步骤6:更精确瞄准目标球的绘制
步骤7:帮助与软件注册的简单方法

 

转载请注明: 敏捷学院-技术资源库  http://mjxy.cn  作者:邢泉  

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值