資源

 

 首先提出幾個問題:app

★、資源是什麼?分類?它的做用是什麼?ui

★、資源在可執行文件中的存在形式是什麼?this

★、資源編譯到文件中的過程是怎麼樣的?spa

★、多個資源在可執行文件中的分佈狀況是怎麼樣的?相同的類型的多個資源呢?不一樣類型的資源呢?.net

★、程序怎麼使用在可執行文件中的資源?rest

★、資源在VS中的使用資源code

 

 

  資源是在邏輯上由應用程序部署的任何非可執行的數據。比較常見的是應用程序的圖標,光標,一些控件或者窗體上的位圖。orm

  資源包括 字符串、圖像和持久的對象。對象

  資源在可執行文件或者程序集中是以二進制的形式存在的。blog

  資源在不一樣的文件中的存在形式不同,在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文件中了。所引發的文件變化有:

  一、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文件。後面應該是對此文件的說明吧。

  二、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.

   三、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中。過程以下:

  一、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要對應上。

  二、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

  三、這時就能夠在代碼中獲得屬性對應的資源了,在一個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         }
相關文章
相關標籤/搜索