Windows Mobile 5 编程体验4

简介:

今天做一个在windows mobile中画图,并保存到模拟器文件夹下的例子。ok新建一个项目,添加一个窗体。界面设计如下,在屏幕的中间我放了一个图片框。

  

要画图,肯定要用到鼠标事件,具体用到哪些呢,应该是Mouse_Down,Mouse_Move,Mouse_Up。首先当鼠标按下时,我们创建一个点的list数组。当鼠标移动的时候我们就往这个list数组里面添加点。在高中我们就学过点成线,线成面。废话不多说,看看程序。

 
  1. using System;  
  2. using System.Linq;  
  3. using System.Collections.Generic;  
  4. using System.ComponentModel;  
  5. using System.Data;  
  6. using System.Drawing;  
  7. using System.Text;  
  8. using System.Windows.Forms;  
  9.  
  10. namespace SmartDeviceProject1  
  11. {  
  12.     public partial class Form1 : Form  
  13.     {  
  14.         public Form1()  
  15.         {  
  16.             InitializeComponent();  
  17.         }  
  18.         List<Point> listPoint = null;  
  19.         List<List<Point>> lineList = new List<List<Point>>();  
  20.         /// <summary>  
  21.         /// 画笔按下  
  22.         /// </summary>  
  23.         /// <param name="sender"></param>  
  24.         /// <param name="e"></param>  
  25.         private void pictureBox1_MouseDown(object sender, MouseEventArgs e)  
  26.         {  
  27.  
  28.             listPoint = new List<Point>(); //创建点的集合  
  29.         }  
  30.  
  31.  
  32.         /// <summary>  
  33.         /// 画笔移动  
  34.         /// </summary>  
  35.         /// <param name="sender"></param>  
  36.         /// <param name="e"></param>  
  37.         private void pictureBox1_MouseMove(object sender, MouseEventArgs e)  
  38.         {  
  39.             this.AddPoint(e.X, e.Y);  
  40.         }  
  41.  
  42.  
  43.         /// <summary>  
  44.         /// 添加点  
  45.         /// </summary>  
  46.         /// <param name="pointX"></param>  
  47.         /// <param name="pointY"></param>  
  48.         private void AddPoint(int pointX,int pointY)  
  49.         {  
  50.             listPoint.Add(new Point(pointX, pointY));  
  51.             int pointCount = listPoint.Count;  
  52.             if (pointCount > 1)  
  53.             {  
  54.                 Graphics gp = pictureBox1.CreateGraphics();  
  55.                 Pen pen = new Pen(Color.Red);  
  56.                 gp.DrawLine(pen, listPoint[pointCount - 2].X, listPoint[pointCount - 2].Y,listPoint[pointCount-1].X,listPoint[pointCount-1].Y);  
  57.                 gp.Dispose();  
  58.                 pen.Dispose();  
  59.             }  
  60.         }  
  61.  
  62.         /// <summary>  
  63.         ///  画笔抬起  
  64.         /// </summary>  
  65.         /// <param name="sender"></param>  
  66.         /// <param name="e"></param>  
  67.         private void pictureBox1_MouseUp(object sender, MouseEventArgs e)  
  68.         {  
  69.             this.AddPoint(e.X,e.Y);  
  70.             lineList.Add(listPoint);//将所有的线条添加进来  
  71.         }  
  72.  
  73.  
  74.         /// <summary>  
  75.         /// 绘制线条  
  76.         /// </summary>  
  77.         private void DrawLines(Graphics gp)  
  78.         {  
  79.             Pen pen = new Pen(Color.Red);  
  80.             int lineCount = lineList.Count;  
  81.             foreach (List<Point> point in lineList)  
  82.             {  
  83.                 gp.DrawLine(pen,point[0].X,point[0].Y,point[1].X,point[1].Y);  
  84.             }  
  85.             pen.Dispose();  
  86.         }  
  87.  
  88.  
  89.         //保存图片  
  90.         private void button1_Click(object sender, EventArgs e)  
  91.         {  
  92.             try 
  93.             {  
  94.                 saveFileDialog1.Filter = "Jpg图片|*.jpg|Gif图片|*.gif|BMP图片|*.bmp|PNG图片|*.png|图片|*.jpg;*.gif;*.bmp;*.png";  
  95.                 saveFileDialog1.FilterIndex =1;  
  96.                 if (saveFileDialog1.ShowDialog() == DialogResult.OK)  
  97.                 {  
  98.                     if (lineList.Count > 0)  
  99.                     {  
  100.                         Bitmap bmp = new Bitmap(pictureBox1.ClientSize.Width, pictureBox1.ClientSize.Height);  
  101.                         Graphics gp = Graphics.FromImage(bmp);  
  102.                         Brush brush = new SolidBrush(Color.White);  
  103.                         gp.FillRectangle(brush, pictureBox1.ClientRectangle);  
  104.                         this.DrawLines(gp);  
  105.                         bmp.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Bmp);  
  106.                         bmp.Dispose();  
  107.                         gp.Dispose();  
  108.                         brush.Dispose();  
  109.                     }  
  110.                     else 
  111.                     {  
  112.                         MessageBox.Show("你还没有绘图,请绘图""提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation,MessageBoxDefaultButton.Button1);  
  113.                     }  
  114.                 }  
  115.             }  
  116.             catch(Exception m)  
  117.             {  
  118.                 MessageBox.Show("保存图片失败,原因:"+m.Message);  
  119.             }  
  120.             finally   
  121.             {  
  122.                 lineList.Clear(); //保存完毕,清除所有线条  
  123.             }  
  124.         }  
  125.  
  126.  
  127.         /// <summary>  
  128.         /// 清除绘制的图形  
  129.         /// </summary>  
  130.         /// <param name="sender"></param>  
  131.         /// <param name="e"></param>  
  132.         private void button2_Click(object sender, EventArgs e)  
  133.         {  
  134.             lineList.Clear();  
  135.             pictureBox1.Invalidate();  
  136.         }  
  137.     }  

看看效果

点击保存,弹出保存框,如下

 

点击保存,完成图片的保存,然后我们去资源管理器看看有没有

 

保存成功,就是这么简单。



本文转自 BruceAndLee 51CTO博客,原文链接:http://blog.51cto.com/leelei/384688,如需转载请自行联系原作者


相关文章
|
6月前
|
消息中间件 C++ Windows
02 MFC - Windows 编程模型
02 MFC - Windows 编程模型
22 0
|
7月前
|
监控 编译器 API
[笔记]Windows核心编程《二十二》注入DLL和拦截API(一)
[笔记]Windows核心编程《二十二》注入DLL和拦截API
147 0
|
7月前
|
人工智能 缓存 Shell
[笔记]Windows核心编程《二十》DLL的高级操作技术(二)
[笔记]Windows核心编程《二十》DLL的高级操作技术(二)
154 0
|
11天前
|
API C++ Windows
windows编程入门_链接错误的配置
windows编程入门_链接错误的配置
15 0
|
3月前
|
Windows
火山中文编程 -- 第一个windows程序
火山中文编程 -- 第一个windows程序
12 0
|
7月前
|
C++ Windows
[笔记]Windows核心编程《番外篇》几种常见的执行命令行方法
[笔记]Windows核心编程《番外篇》几种常见的执行命令行方法
|
3月前
|
编译器 API Windows
windows编程基础
windows编程基础
15 0
|
3月前
|
Windows
win32编程 -- windows绘图操作
win32编程 -- windows绘图操作
20 0
|
4月前
|
网络协议 Linux C语言
005.在Windows下编程让效率起飞
windows开发Linux方式: 先用编辑器编写源代码 然后进入Linux 系统,使用gcc编译器(后面会讲),对源代码进行编译运行。 熟练后推荐使用VS2019 开发Linux C++ 程序 将自己的Ip地址设为静态IP
41 1
|
5月前
|
人工智能 机器人 C#
Windows编程课设(C#)——基于WPF和.net的即时通讯系统(仿微信)
一款参考QQ、微信的即时通讯软件。采用CS结构,客户端基于.Net与WPF开发,服务端使用Java开发。

热门文章

最新文章