在上篇文章“使用
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# 开发智能手机软件:推箱子(二)的更多相关文章

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

    这是"使用 C# 开发智能手机软件:推箱子"系列文章的第十二篇.在这篇文章中,介绍 Window/AboutDlg.cs 源程序文件. 这个源程序文件包括 AboutDlg 类,该 ...

  2. 使用 C# 开发智能手机软件:推箱子(十四)

    这是"使用 C# 开发智能手机软件:推箱子"系列文章的第十四篇.在这篇文章中,介绍 Window/ErrorMsgDlg.cs 源程序文件.这个源程序文件包括 ErrorMsgDl ...

  3. 使用 C# 开发智能手机软件:推箱子(十八)

    这是"使用 C# 开发智能手机软件:推箱子" 系列文章的第十八篇.在这篇文章中.介绍 Window/SelectLevelDlg.cs 源程序文件. 这个源程序文件包括 Selec ...

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

    这是"使用 C# 开发智能手机软件:推箱子"系列文章的第四篇. 在这篇文章中,介绍 Common/FindPath.cs 源程序文件. using System; using Sy ...

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

    这是"使用 C# 开发智能手机软件:推箱子"系列文章的第三篇.在这篇文章中,介绍 Common/Block.cs 源程序文件.   1 namespace Skyiv.Ben.Pu ...

  6. [转]Flash ActionScript2.0面向对象游戏开发-推箱子

    本文转自:http://www.alixixi.com/Dev/W3C/Flash/2007/2007070868666.html 概述: Flash ActionScript2.0是一种面向对向的编 ...

  7. ArcGIS二次开发AO软件安装破解教程

    最近在做ArcGIS二次开发时,采用C#中的WPF技术,在调研中发现ArcGIS 10.3及以上版本支持WPF技术,但是关于ArcGIS10.3的破解教程甚少,自己尝试了不少方法都失败了,淘@宝@商家 ...

  8. 用C写一个简单的推箱子游戏(二)

    下面接着上一篇随笔<用C写一个简单的推箱子游戏(一)>来写 tuidong()函数是用来判断游戏人物前方情况的函数,是推箱子游戏中非常重要的一个函数,下面从它开始继续介绍推箱子的小程序怎么 ...

  9. 每个人都可以用C语言写的推箱子小游戏!今天你就可以写出属于自己项目~

    C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...

随机推荐

  1. centos 7 中的 systemd

    systemd的服务管理程序 systemctl是最主要的工具.它融合 service 和chkconfig的功能于一体.你可以使用它永久性或只在当前会话中启用/禁用服务. 下面命令用于列出正在运行的 ...

  2. python学习笔记(16)--django的安装

    说明: 1. 直接在cmd输入: pip install Django==1.10.6前提是安装了python,pip并添加了环境变量 2. http://www.lfd.uci.edu/~gohlk ...

  3. perl 计算方差中值平均数 Statistics::Descriptive;

    http://search.cpan.org/~shlomif/Statistics-Descriptive-3.0612/lib/Statistics/Descriptive.pm use Stat ...

  4. cocos2dx坐标系介绍

    GL坐标系 Cocos2D以OpenglES为图形库,所以它使用OpenglES坐标系.GL坐标系原点在屏幕左下角.x轴向右.y轴向上. 屏幕坐标系 苹果的Quarze2D使用的是不同的坐标系统,原点 ...

  5. C++ - 动态申请数组空间

    // 用指针p指向由new动态分配的长度为length*sizeof(int)的内存空间. int * p = new int[length];

  6. 实践中更高效、实现起来相对简单的基于末尾坏字符原则的BM算法实现

    之前网上看的若干算法,无非两个原则:坏字符原则.好后缀原则.按照算法所述实现了一个版本,但发现其效率还不如本文所述的实现方式.个人分析效率较低的原因可能是因为不断地向前找坏字符或者好后缀来确定跳跃距离 ...

  7. 正确配置Linux系统ulimit值的方法

    在Linux下面部署应用的时候,有时候会遇上Socket/File: Can’t open so many files的问题:这个值也会影响服务器的最大并发数,其实Linux是有文件句柄限制的,而且L ...

  8. NODE_PATH的疑难杂症(转)

    nodejs 中的 NODE_PATH 在使用 nodejs 开发中我们都免不了要去安装一些第三方模块. 那么你或多或少的遇到过以下一些问题 再继续阅读之前,我们先来弄清楚一个概念. npm inst ...

  9. WPF教程六:布局之Grid面板

    Grid:网格面板 Grid顾名思义就是“网格”,以表格形式布局元素,对于整个面板上的元素进行布局,它的子控件被放在一个一个事先定义好的小格子里面,整齐配列. Grid和其他各个Panel比较起来,功 ...

  10. nodejs系列笔记02---模块路径解析

    模块路径解析规则 参考这篇博客 我们已经知道,require函数支持斜杠(/)或盘符(C:)开头的绝对路径,也支持./开头的相对路径.但这两种路径在模块之间建立了强耦合关系,一旦某个模块文件的存放位置 ...