资源

 

 首先提出几个问题:

★、资源是什么?分类?它的作用是什么?

★、资源在可执行文件中的存在形式是什么?

★、资源编译到文件中的过程是怎么样的?

★、多个资源在可执行文件中的分布情况是怎么样的?相同的类型的多个资源呢?不同类型的资源呢?

★、程序怎么使用在可执行文件中的资源?

★、资源在VS中的使用资源

 

 

  资源是在逻辑上由应用程序部署的任何非可执行的数据。比较常见的是应用程序的图标,光标,一些控件或者窗体上的位图。

  资源包括 字符串、图像和持久的对象。

  资源在可执行文件或者程序集中是以二进制的形式存在的。

  资源在不同的文件中的存在形式不一样,在PE文件中和程序集中形式不同。

  把资源编译到可执行文件或者程序集中,有一个通用的过程。准备好源资源,比如字符串、图片等;在文件文件中按照语法格式编写脚本文件,不同的资源编译程序对应不同的语法格式;资源编译器把脚本文件和准备好的资源编译成二进制文件;语言编译器把上步的二进制文件编译到可执行程序或者程序集中。

  在可执行文件或者程序集中添加资源时,有不同的具体的方式。微软给出5种在.net下的桌面应用程序中操作资源的方法;在这里

  .net中的资源。资源脚本 文件有两种形式:存在于文本文件.txt 或 .restext,存在于.resx文件;资源编译器编译后的二进制资源文件.resource;变化过程如下:

  第二个参考:http://msdn.microsoft.com/zh-cn/library/ccec7sz1%28v=vs.110%29.aspx

 

   在VS2005中。

  加入外部图形资源文件引起的工程文件的变化

  手动加入资源文件

 加入外部图形资源文件引起的工程文件的变化

   当用PictureBox组件的属性--Image添加资源文件时,通过“项目资源--导入”的方式加入,这样资源文件就在编译时直接合成的.exe或者.dll文件中了。所引起的文件变化有:

  1、Properties文件夹下Resources.resx文件中添加了一项:脚本 文件。

1   <data name="xinggefenxi2013.03.13" type="System.Resources.ResXFileRef, System.Windows.Forms">
2     <value>..\Resources\xinggefenxi2013.03.13.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
3   </data>

  name=""代表外部资源的代号;<value>中有路径是 *.jpg文件。后面应该是对此文件的说明吧。

  2、Properties文件夹下Resources.Designer.cs文件中添加了如下项:

1         internal static System.Drawing.Bitmap xinggefenxi2013_03_13 {
2             get {
3                 object obj = ResourceManager.GetObject("xinggefenxi2013.03.13", 
4 
5 resourceCulture);
6                 return ((System.Drawing.Bitmap)(obj));
7             }

  这是通过资源代号来得到对应的资源,这是一个静态的属性。属性名是xingefenxi2013_03_13.

   3、Form1.Designer.cs窗体配置文件中,变化如下:

1             // 
2             // pictureBox1
3             // 
4             this.pictureBox1.Image = global::Winform窗体资源的使用.Properties.Resources.xinggefenxi2013_03_13;//主要是这句
5             this.pictureBox1.Location = new System.Drawing.Point(-3, 0);
6             this.pictureBox1.Name = "pictureBox1";
7             this.pictureBox1.Size = new System.Drawing.Size(559, 414);
8             this.pictureBox1.TabIndex = 0;
9             this.pictureBox1.TabStop = false;

其中一句是访问上面的属性的。

 手动加入资源文件

   通过上面三个地方的变化,可以手动添加一个外部资源文件,并最终编译到文件exe或者dll中。过程如下:

  1、Properties文件夹下Resources.resx文件中

1   </data>
2     <data name="test" type="System.Resources.ResXFileRef, System.Windows.Forms">
3     <value>..\Resources\11.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
4   </data>

直接添加一项,注意那个路径11.png要对应上。

  2、Properties文件夹下Resources.Designer.cs文件中

1         internal static System.Drawing.Bitmap gg{
2             get {
3                 object obj = ResourceManager.GetObject("test", resourceCulture);
4                 return ((System.Drawing.Bitmap)(obj));
5             }
6         }

属性名设置为gg

  3、这时就可以在代码中得到属性对应的资源了,在一个Button的事件中

1         private void button1_Click(object sender, EventArgs e)
2         {
3             pictureBox2.Image = global::Winform窗体资源的使用.Properties.Resources.gg;
4         }

  结果就能动态显示图片了。并且把.exe移动到其他文件夹下也可以正常显示,可见已经植入到程序中了。

 添加光标文件

   只在Resources.resx中添加脚本代码:

  <data name="cursor" type="System.Resources.ResXFileRef, System.Windows.Forms">
    <value>..\chat.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
  </data>

   编译后就会自动生成:

1         internal static System.Drawing.Icon cursor {
2             get {
3                 object obj = ResourceManager.GetObject("cursor", resourceCulture);
4                 return ((System.Drawing.Icon)(obj));
5             }
6         }

 

 

 

 

posted @ 2015-01-29 07:50  deeeeeed  阅读(572)  评论(0编辑  收藏  举报

pppppppppppppp