zoukankan      html  css  js  c++  java
  • 资源

     首先提出几个问题:

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

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

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

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

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

    ★、资源在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>..Resourcesxinggefenxi2013.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>..Resources11.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         }

     

     

     

  • 相关阅读:
    滤波和减采样的互换
    LwIP情景示例
    [redis] redis 对string类型数据操作
    [ExtJs] ExtJs4.2 数据模型Ext.data.Model学习
    [生活] 90年前后出生的人现状如何?
    【java】java内存模型(2)--volatile内存语义详解
    【java】java内存模型 (1)--基础
    [extjs] ExtJS 4.2 开发环境搭建
    强烈推荐:240多个jQuery插件
    使用CXF为webservice添加拦截器
  • 原文地址:https://www.cnblogs.com/ddx-deng/p/3859149.html
Copyright © 2011-2022 走看看