使用 C# 开发智能手机软件:推箱子(二)

来源:互联网 发布:精通d3.js 源代码 编辑:程序博客网 时间:2024/05/19 16:20
2007年10月09日 11:37:00

在上篇文章"使用 C# 开发智能手机软件:推箱子(一)"中,我对推箱子程序作了总体介绍。这次,我先介绍 Common/Fcl.cs 源程序文件。
1 using System;
2 using System.IO;
3 using System.Drawing;
4
5 namespace Skyiv.Ben.PushBox.Common
6 {
7 /// >summary<
8 /// 这里是 .NET Framework 支持,而 .NET Compact Framework 不支持的东东
9 /// >/summary<
10 static class Fcl
11 {
12 /// >summary<
13 /// 获取为此环境定义的换行字符串。-- Environment
14 /// >/summary<
15 public static string NewLine { get { return "/r/n"; } }
16
17 /// >summary<
18 /// 打开一个文本文件,将文件的所有行读入一个字符串,然后关闭该文件。-- File
19 /// >/summary<
20 /// >param name="path"<要打开以进行读取的文件>/param<
21 /// >returns<包含文件所有行的字符串>/returns<
22 public static string ReadAllText(string path)
23 {
24 string text = "";
25 if (File.Exists(path))
26 {
27 using (StreamReader sr = new StreamReader(path, Pub.Encode))
28 {
29 text = sr.ReadToEnd();
30 }
31 }
32 return text;
33 }
34
35 /// >summary<
36 /// 创建一个新文件,在其中写入指定的字符串,然后关闭该文件。-- File
37 /// >/summary<
38 /// >param name="path"<要写入的文件>/param<
39 /// >param name="contents"<要写入文件的字符串>/param<
40 public static void WriteAllText(string path, string contents)
41 {
42 using (StreamWriter sw = new StreamWriter(path, false, Pub.Encode))
43 {
44 sw.Write(contents);
45 }
46 }
47
48 /// >summary<
49 /// 将指定的 Size 添加到指定的 Point。-- Point
50 /// >/summary<
51 /// >param name="point"<要添加的 Point>/param<
52 /// >param name="size"<要添加的 Size>/param<
53 /// >returns<加法运算的结果>/returns<
54 public static Point Add(Point point, Size size)
55 {
56 return new Point(point.X + size.Width, point.Y + size.Height);
57 }
58
59 /// >summary<
60 /// 将一维数组的大小更改为指定的新大小。-- Array
61 /// >/summary<
62 /// >typeparam name="T"<数组元素的类型>/typeparam<
63 /// >param name="array"<要调整大小的一维数组>/param<
64 /// >param name="newSize"<新数组的大小>/param<
65 public static void Resize>T<(ref T[] array, int newSize)
66 {
67 if (array != null && array.Length == newSize) return;
68 if (array == null) array = new T[0];
69 T[] newArray = new T[newSize];
70 Array.Copy(array, newArray, Math.Min(array.Length, newArray.Length));
71 array = newArray;
72 }
73 }
74 }
75
俗话说,工欲善其事,必先利其器。我们知道,Microsoft .NET Compact Framework 只是 Microsoft .NET Framework 的一个子集,她省略了一些不常用的功能。但是,如果我们恰好需要这些功能,只好自己重新实现一下了。这个 Fcl 静态类就是起这个作用的。源程序代码的注释已经写得很清楚了。
Fcl.NewLine 我原本是想写成这样的:
static class Fcl
{
static static string newLine;

/// >summary<
/// 获取为此环境定义的换行字符串。-- Environment
/// >/summary<
public static string NewLine
{
get
{
if (newLine == null)
{
newLine
= (Environment.OSVersion.Platform != PlatformID.Unix) ? "/r/n" : "/n";
}
return newLine;
}
}
}
可惜的是,这段代码无法在 .NET Compact Framework 下通过编译(如果是 .NET Framework 则没有问题)。原因是 PlatformID 枚举的成员:
Unix 操作系统为 Unix。
Win32NT 操作系统为 Windows NT 或较新的版本。
Win32S 操作系统为 Win32s(Win32 子集)类型。
Win32Windows 操作系统为 Windows
95 或较新的版本。
WinCE 操作系统为 Windows CE。
PlatformID.Unix 并不被 .NET CF 所支持。这实在是一件很奇怪的事,既然 .NET CF 都支持 PlatformID 的 Win32NT、Win32S、Win32Windows、WinCE 成员,为什么就不能支持 Unix 成员呢?这样,这个程序将来要移植到 Linux 操作系统时就有些小麻烦了。
要知道,这在主窗体的代码中用以下一段代码来实现在智能手机上禁用"前端显示"功能。
public partial class MainForm : Form
{
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
miTopMost.Enabled
= (Environment.OSVersion.Platform != PlatformID.WinCE);
env.LoadConfig();
env.LoadGroup();
LoadLevel(
true);
if (env.IsSave) Restore(env.Steps);
}


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1816565


原创粉丝点击