0

我的 .net 2.0 winforms 应用程序有小问题。我想在应用程序中嵌入一些不同的图标。

还有其他要求:

  • 必须由 ms-build 自动重建;不允许使用外部 gui 应用程序进行准备
  • 应用程序必须包含版本信息。

嵌入多个图标后,我想注册两个文件关联到应用程序文档/扩展文件。

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

其中“2”是图标索引。

我知道我需要使用某种老式的 Win32 资源文件。

我还在某处发现,如果使用 Visual Studio 2005,可以添加“本机资源文件”,但它在 2008 年不再存在。

是否有可能满足所有这些要求,如果可以,如何满足?

4

6 回答 6

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结构

您使用 进行编译rc,它应该是 VS 的一部分,或者在 Windows 平台 SDK 中。文件编译的结果.rc是一个.res可以包含在 C# 项目的属性页面中的文件——或者在.csproj文件本身中添加以下内容。

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

编译您的项目并查看资源管理器,信息和图标应该在那里。

CSC 编译器还提供了一个/win32res开关,可以将.res文件嵌入到您的应用程序中。

希望这可以帮助!

于 2010-01-25T20:28:22.700 回答
1

就像在 2005 中一样,您可以将图标添加到资源中(通过项目属性)。完成此操作后,转到您在项目资源管理器中添加的图标,每个图标都有一个 BuildAction 属性,说明该资源是如何存储和利用的。

我认为您正在寻找的是 BuildAction 属性的 EmbeddedResource 值。

于 2009-01-09T14:35:24.797 回答
0

新建 WinForms 应用程序 -> 在解决方案资源管理器中展开属性 -> 双击 Resources.resx -> 单击添加资源(下拉菜单还包括添加现有资源)

这些现在应该可以在可视化设计器中或使用 Properties.Resources.[Your Resource Name Here] 的代码中提供给您

希望有帮助。

于 2009-01-09T14:35:25.890 回答
0

当我需要多个图标时,我将 png/bmp(或任何图像类型)作为图像资源嵌入到应用程序中。在 Visual Studio 中转到项目 -> 属性 -> 资源。

在代码中,您可以在运行时执行以下操作:

buttonPlay.Image = Properties.Resources.Navigation_Media_Pause;

或者

buttonPlay.Image = Properties.Resources.Navigation_Media_Play;

假设您将 2 个图像资源称为“Navigation_Media_Pause”和“Navigation_Media_Play”。

于 2009-01-09T14:39:18.957 回答
0

编译应用程序,然后用visual studio打开.exe,然后你就可以添加你想要的所有图标了。

您还可以在 c# 中使用 win32 资源文件做一些事情,但我目前找不到喜欢的东西

于 2009-01-09T14:53:02.657 回答
0

我决定将所有图标放入单独的老式普通 win32 c++ *.dll 中。它更方便,我不需要对 versioninfo/win32resources 做任何技巧。

于 2009-01-20T13:47:58.933 回答