2009-01-09 39 views
0

我的.net 2.0 winforms應用程序有一個小問題。 我想嵌入一些不同的圖標應用程序。多個圖標到C#2.0 WinApp

還有其他要求:

  • 必須是自動可修復由 MS-建設;使用外部gui應用程序 進行準備是不允許的
  • 應用程序必須包含versioninfo。

嵌入多個圖標後,我想註冊讓我們說兩個文件關聯到應用程序文件/擴展名文件。

[Registry] 
... 
Root: HKCR; Subkey: "MyFileExt\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\MyApp.exe,2" 

其中「2」是圖標索引。

我知道我需要使用某種方式舊式的Win32資源文件。

我還發現,如果使用Visual Studio 2005,可以添加「原生資源文件」,但它在2008年不存在。

是否有可能滿足所有這些要求,如果是的話 - 如何?

回答

0

我決定把所有的圖標到單獨的老派普通的Win32 C++的* .dll找到了LIK。 它更加方便,我不需要使用versioninfo/win32resources做任何技巧。

1

就像在2005年一樣,您可以將圖標添加到資源中(通過項目屬性)。在完成之後,轉到在項目資源管理器中添加的圖標,每個圖標都有一個關於如何存儲和使用該資源的BuildAction屬性。

我認爲你要找的是BuildAction屬性的EmbeddedResource值。

0

新的WinForms應用程序 - >展開屬性在Solution Explorer - >在Resources.resx雙擊 - >點擊添加資源(下拉還包括將現有的資源)

這些應該是提供給你現在視覺設計師或代碼使用Properties.Resources。[您的資源名稱在這裏]

希望有所幫助。

0

當我需要多個圖標時,我在應用程序中嵌入了png/bmp(或其它任何圖像類型)作爲圖像資源。在Visual Studio中轉到Project - > Properties - > Resoruces。

的代碼中,你可以做在運行時執行以下操作:

buttonPlay.Image = Properties.Resources.Navigation_Media_Pause; 

buttonPlay.Image = Properties.Resources.Navigation_Media_Play; 

Assumning,你叫2個圖像資源 「Navigation_Media_Pause」 和 「Navigation_Media_Play」。

0

編譯應用程序,然後用Visual Studio打開.exe,然後添加所需的所有圖標。

還有一些你可以做的Win32資源文件在C#中,但我不能在此刻

2

解決辦法其實很簡單,但它要求我回想起我和RC文件第一次遇到......

在一個純文本文件,你可以寫出如下

#include <windows.h> 

// The following is some Win32 candy for 
// -- the Windows styles in XP, Vista & 7 
// does the UAC too. 
1 RT_MANIFEST "App.manifest" 
// -- the versioning info, which we find usually in 
// AssemblyInfo.cs, but we need to add this one 
// because including Win32 resources overrides the .cs 
// file! 
VS_VERSION_INFO VERSIONINFO 
FILEVERSION  1,0,0,0 
PRODUCTVERSION 1,0,0,0 
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK 
FILEFLAGS  VS_FF_DEBUG 
FILEOS   VOS__WINDOWS32 
FILETYPE  VFT_DLL 
FILESUBTYPE  VFT2_UNKNOWN 
BEGIN 
    BLOCK "StringFileInfo" 
    BEGIN 
     BLOCK "040904E4" // en-US/cp-1252 
     BEGIN 
      VALUE "CompanyName",  "My Company" 
      VALUE "ProductName",  "My C# App" 
      VALUE "ProductVersion", "1.0.0.0" 
     END 
    END 
     BLOCK "VarFileInfo" 
     BEGIN 
      VALUE "Translation", 0x409, 1252 // en-US in ANSI (cp-1252) 
     END 
    END 
END 

// And now the icons. 
// Note that the icon with the lowest ID 
// Will be used as the icon in the Explorer. 
101 ICON "Icon1.ico" 
102 ICON "Icon2.ico" 
103 ICON "Icon3.ico" 

(有關VERSIONINFO結構的詳細信息,請參閱MSDN:VERSIONINFO structure

使用rc進行編譯,該應用程序應該是VS的一部分,或者在Windows平臺SDK中進行編譯。 .rc文件的編譯結果是一個.res文件,它可以包含在C#項目的屬性頁中 - 或者在.csproj文件本身中添加以下內容。

<Win32ResourceFile>C:\path\to\my\resource\file.res</Win32ResourceFile> 

編譯你的項目,並在資源管理器中查看,信息和圖標應該在那裏。

CSC編譯器還提供了一個/win32res開關,將.res文件嵌入到您的應用程序中。

希望這會有所幫助!