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,如需转载请自行联系原作者


相关文章
|
消息中间件 C++ Windows
02 MFC - Windows 编程模型
02 MFC - Windows 编程模型
142 0
|
网络协议 API Windows
MASM32编程调用 API函数RtlIpv6AddressToString,windows 10 容易,Windows 7 折腾
MASM32编程调用 API函数RtlIpv6AddressToString,windows 10 容易,Windows 7 折腾
[原创]用MASM32编程获取windows类型
[原创]用MASM32编程获取windows类型
|
JavaScript 前端开发 API
MASM32编程通过WMI获取Windows计划任务
MASM32编程通过WMI获取Windows计划任务
|
编译器 开发工具 C语言
解锁QtCreator跨界神技!Windows下轻松驾驭OpenCV动态库,让你的跨平台开发如虎添翼,秒变视觉编程大师!
【8月更文挑战第4天】QtCreator是一款强大的跨平台IDE,便于创建多平台应用。本教程教你如何在Windows环境下集成OpenCV库至Qt项目。首先,下载匹配MinGW的OpenCV预编译版并解压。接着,在QtCreator中新建或打开项目,并在.pro文件中添加OpenCV的头文件和库文件路径。确保编译器设置正确。随后编写测试代码,例如加载和显示图片,并进行编译运行。完成这些步骤后,你就能在QtCreator中利用OpenCV进行图像处理开发了。
690 6
|
API Windows
MASM32编程获取Windows当前桌面主题名
MASM32编程获取Windows当前桌面主题名
|
数据库 Windows
超详细步骤解析:从零开始,手把手教你使用 Visual Studio 打造你的第一个 Windows Forms 应用程序,菜鸟也能轻松上手的编程入门指南来了!
【8月更文挑战第31天】创建你的第一个Windows Forms (WinForms) 应用程序是一个激动人心的过程,尤其适合编程新手。本指南将带你逐步完成一个简单WinForms 应用的开发。首先,在Visual Studio 中创建一个“Windows Forms App (.NET)”项目,命名为“我的第一个WinForms 应用”。接着,在空白窗体中添加一个按钮和一个标签控件,并设置按钮文本为“点击我”。然后,为按钮添加点击事件处理程序`button1_Click`,实现点击按钮后更新标签文本为“你好,你刚刚点击了按钮!”。
1354 0
|
开发框架 JavaScript .NET
【Azure 应用服务】Azure Mobile App (NodeJS) 的服务端部署在App Service for Windows中出现404 Not Found
【Azure 应用服务】Azure Mobile App (NodeJS) 的服务端部署在App Service for Windows中出现404 Not Found
188 0
|
Java C++
jni编程(windows+JDK11+clion)
jni编程(windows+JDK11+clion)
250 1
|
API C++ Windows
windows编程入门_链接错误的配置
windows编程入门_链接错误的配置
137 0

热门文章

最新文章