Несколько икон в c # 2.0 WinApp - PullRequest
       14

Несколько икон в c # 2.0 WinApp

0 голосов
/ 09 января 2009

У меня небольшая проблема с моим приложением winnet .net 2.0. Я хочу добавить в приложение несколько разных значков.

Есть и другие требования:

  • должен быть автоматически восстановлен мс-сборка; использование внешних графических приложений для приготовления не допускается
  • приложение должно содержать versioninfo.

После встраивания нескольких значков я хочу зарегистрировать, скажем, две ассоциации файлов с документами приложения / файлами расширения.

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

где "2" - это индекс значков.

Я знаю, что мне нужно как-то использовать файл ресурсов Win32 старого стиля.

Я также где-то обнаружил, что при использовании Visual Studio 2005 можно добавить «файл собственных ресурсов», но его больше нет в 2008 году.

Можно ли выполнить все эти требования и если да - как?

Ответы [ 6 ]

2 голосов
/ 25 января 2010

Решение на самом деле довольно простое, хотя мне потребовалось вспомнить мою первую встречу с 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 Platform SDK. Результатом компиляции вашего .rc файла является файл .res, который можно включить в страницу свойств вашего проекта C # или добавить следующее в сам файл .csproj.

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

Скомпилируйте ваш проект и посмотрите в проводнике, там должна быть информация и значки.

Компилятор CSC также предоставляет переключатель /win32res, который встраивает файл .res в ваше приложение.

Надеюсь, это поможет!

1 голос
/ 09 января 2009

Как и в 2005 году, вы можете добавлять иконки к ресурсам (через свойства проекта). После этого перейдите к значкам, которые вы добавили в проводнике проекта, каждый значок имеет свойство BuildAction о том, как этот ресурс хранится и используется.

Я думаю, что вы ищете значение EmbeddedResource свойства BuildAction.

0 голосов
/ 20 января 2009

Я решил поместить все иконки в отдельную старую обычную Win32 C ++ * .dll. Это более удобно, и мне не нужно делать какие-либо трюки с versioninfo / win32resources.

0 голосов
/ 09 января 2009

Скомпилируйте приложение, затем откройте .exe с Visual Studio, затем вы можете добавить все значки, которые вы хотите.

Есть также кое-что, что вы можете сделать с файлами ресурсов win32 в c #, но я не могу найти аналогию для этого в данный момент

0 голосов
/ 09 января 2009

Когда мне нужно несколько значков, я встраиваю 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".

0 голосов
/ 09 января 2009

Новое приложение WinForms -> Развернуть свойства в обозревателе решений -> Двойной щелчок на Resources.resx -> Нажмите Добавить ресурс (в раскрывающемся списке также добавляются существующие ресурсы)

Они должны быть доступны вам сейчас в визуальном конструкторе или в коде с использованием Properties.Resources. [Ваше имя ресурса здесь]

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...