Windows Mobile 5 编程体验4
今天做一个在windows mobile中画图,并保存到模拟器文件夹下的例子。ok新建一个项目,添加一个窗体。界面设计如下,在屏幕的中间我放了一个图片框。
要画图,肯定要用到鼠标事件,具体用到哪些呢,应该是Mouse_Down,Mouse_Move,Mouse_Up。首先当鼠标按下时,我们创建一个点的list数组。当鼠标移动的时候我们就往这个list数组里面添加点。在高中我们就学过点成线,线成面。废话不多说,看看程序。
- using System;
- using System.Linq;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Text;
- using System.Windows.Forms;
- namespace SmartDeviceProject1
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- List<Point> listPoint = null;
- List<List<Point>> lineList = new List<List<Point>>();
- /// <summary>
- /// 画笔按下
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
- {
- listPoint = new List<Point>(); //创建点的集合
- }
- /// <summary>
- /// 画笔移动
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
- {
- this.AddPoint(e.X, e.Y);
- }
- /// <summary>
- /// 添加点
- /// </summary>
- /// <param name="pointX"></param>
- /// <param name="pointY"></param>
- private void AddPoint(int pointX,int pointY)
- {
- listPoint.Add(new Point(pointX, pointY));
- int pointCount = listPoint.Count;
- if (pointCount > 1)
- {
- Graphics gp = pictureBox1.CreateGraphics();
- Pen pen = new Pen(Color.Red);
- gp.DrawLine(pen, listPoint[pointCount - 2].X, listPoint[pointCount - 2].Y,listPoint[pointCount-1].X,listPoint[pointCount-1].Y);
- gp.Dispose();
- pen.Dispose();
- }
- }
- /// <summary>
- /// 画笔抬起
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
- {
- this.AddPoint(e.X,e.Y);
- lineList.Add(listPoint);//将所有的线条添加进来
- }
- /// <summary>
- /// 绘制线条
- /// </summary>
- private void DrawLines(Graphics gp)
- {
- Pen pen = new Pen(Color.Red);
- int lineCount = lineList.Count;
- foreach (List<Point> point in lineList)
- {
- gp.DrawLine(pen,point[0].X,point[0].Y,point[1].X,point[1].Y);
- }
- pen.Dispose();
- }
- //保存图片
- private void button1_Click(object sender, EventArgs e)
- {
- try
- {
- saveFileDialog1.Filter = "Jpg图片|*.jpg|Gif图片|*.gif|BMP图片|*.bmp|PNG图片|*.png|图片|*.jpg;*.gif;*.bmp;*.png";
- saveFileDialog1.FilterIndex =1;
- if (saveFileDialog1.ShowDialog() == DialogResult.OK)
- {
- if (lineList.Count > 0)
- {
- Bitmap bmp = new Bitmap(pictureBox1.ClientSize.Width, pictureBox1.ClientSize.Height);
- Graphics gp = Graphics.FromImage(bmp);
- Brush brush = new SolidBrush(Color.White);
- gp.FillRectangle(brush, pictureBox1.ClientRectangle);
- this.DrawLines(gp);
- bmp.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Bmp);
- bmp.Dispose();
- gp.Dispose();
- brush.Dispose();
- }
- else
- {
- MessageBox.Show("你还没有绘图,请绘图", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation,MessageBoxDefaultButton.Button1);
- }
- }
- }
- catch(Exception m)
- {
- MessageBox.Show("保存图片失败,原因:"+m.Message);
- }
- finally
- {
- lineList.Clear(); //保存完毕,清除所有线条
- }
- }
- /// <summary>
- /// 清除绘制的图形
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void button2_Click(object sender, EventArgs e)
- {
- lineList.Clear();
- pictureBox1.Invalidate();
- }
- }
- }
看看效果
点击保存,弹出保存框,如下
点击保存,完成图片的保存,然后我们去资源管理器看看有没有
保存成功,就是这么简单。
本文转自 BruceAndLee 51CTO博客,原文链接:http://blog.51cto.com/leelei/384688,如需转载请自行联系原作者
Windows Mobile 5 编程体验4相关推荐
- [CF.Skills]Windows Mobile如何编程实现免提功能
摘要:本文阐述了如何在Windows mobile的设备上使用托管代码在来电时触发扬声器,间接实现免提的功能 Keywords Windows Mobile,.NET CompactFramework ...
- Windows Mobile 系列文章索引---不断整理中(2009-07-08)
Windows Mobile 高级编程系列 ØWindows Mobile 进阶系列.第零回.序 ØWindows Mobile 进阶系列.第一回.真的了解.NET CF吗? ØWindows Mob ...
- Windows Mobile 开发工具和资源
经常有朋友想学习 Windows Mobile 开发,体验移动开发的乐趣,但不知道从哪里下载各种开发工具和学习资料.于是我整理了一个列表,里面包含了各个版本的 Windows Mobile SDK, ...
- 转 Windows Mobile 开发工具和资源 黎波
经常有朋友想学习 Windows Mobile 开发,体验移动开发的乐趣,但不知道从哪里下载各种开发工具和学习资料.于是我整理了一个列表,里面包含了各个版本的 Windows Mobile SDK, ...
- Windows Mobile 编程 (Win32) - 获取设备能力
<Windows 程序设计>第五章重点讲述图形基础.首先一个示例代码是获取设备描述表信息.代码与Windows Mobile 编程 (Win32) - 输出文本中的代码类似. #inclu ...
- Windows Mobile智能手机今日插件编程开发初探(使用C++, vs2008, Pocket PC 5.0内核)
我很久以前写的一篇文章,现在转移到这里. 前天突发灵感认为如果能做一个在手机桌面上的每日问候程序一定会很有意思,于是开始了Pocket PC 今日插件(today plugin)编程的学习和研究. 受 ...
- Windows Mobile 5 0编程—奥运场馆速查
虽然前不久买了一个HP基于windows Mobile 5.0的PDA,由于工作太为繁忙,并没有为之开发相应的程序.没想到微软最近开展了酷炫应用争霸赛,征集"奥运"相关的作品,我忙 ...
- Windows Mobile 5.0 中为开发人员提供的新功能(3)
Windows Mobile 5.0 中为开发人员提供的新功能(3) Pocket Outlook 增强功能 Pocket Outlook 向用户和应用程序开发人员提供了易于使用的 PIM.将 Poc ...
- Windows Mobile与OPhone开发对比
转载自IT168 [ http://www.it168.com/ ] Windows Mobile在经历过最初的Wince系列,pockect pc和smartphone两种版本,到微软最 ...
最新文章
- 幼儿园语言活动包括哪几类_幼儿园教育:《一起玩》语言活动教案
- [***.launch] is neither a launch file in package [***] nor is [***] a launch
- redis安装 redis命令 php如何使用redis
- Wijmo 更优美的jQuery UI部件集:通过jsFiddle测试Wijmo Gauges
- 1000 qps java,什么是QPS?
- “Zhuang.Data”轻型数据库访问框架(二)框架的入口DbAccessor对象
- 归并排序(python实现)
- 使用dbghelp获取调用堆栈--release下的调试方法学
- 为内存密集型应用程序转义JVM堆
- python pip安装pyinstaller报错_pip install pyinstaller (安装过程报错解决)
- WebSocket能干啥
- 【luogu3834】【模板】可持久化线段树 2(主席树),静态区间第K小值
- 3.以每行一个单词的形式打印其输入
- Home Assistant系列 -- 设置界面语言与地理位置
- 【PC】如何让程序开机自启动/如何打开开机自启动文件夹
- 实时数据缓存管理的初步设计
- C程序设计语言逆波兰式计算器学习心得
- Linux下Moudle工具的介绍与使用
- 大学计算机教育国外著名教材系列 数据结构,经典数据结构(Java语言版)(影印版)——大学计算机教育国外著名教材系列...
- L1 正则化和L2正则化