在上篇文章“
使用 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);
}
上一篇:
使用 C# 开发智能手机软件:推箱子(一)
下一篇:
使用 C# 开发智能手机软件:推箱子(三)
返回目录