2016-12-13 2 views
0

Нашли примеры использования прозрачности с фоновым изображением, но этот вариант меня не устраивает. Поскольку предполагается, что фон будет меняться при определенных действиях.Как использовать прозрачное изображение в WinCe 5.0?

+0

Какой язык программирования вы используете? Например, C# .NET 2.0/3.5 CompactFramework или встроенный C++. – AlainD

+0

C# 3.5 CompactFramework – Macro

+0

Возможно, добавьте это к вопросу (наряду с моим предположением о Visual Studio 2008), и мы можем удалить эти комментарии. – AlainD

ответ

1

Не уверен, что вы делаете, поскольку детали легкие, но надеюсь, что это будет полезно. Мы используем значки (.ico) с прозрачностью следующим образом. Они просто меняют фон на один цвет. Если вам нужно более сложное поведение, это может оказаться неприемлемым.

  • Добавить иконки (с прозрачным фоном) в свой проект. Установите Build Action как Embedded Resource. В приведенном ниже примере мы используем значок под названием ico1.ico.

  • Определите структуру для хранения ваших значков. В зависимости от количества цветов фона, которые вам нужны, для каждой комбинации значков/цветов вам понадобится экземпляр. Если во время разработки это число очень велико или неизвестно, вам нужно будет создавать значки «на лету».

    public struct CacheGraphics 
    { 
        public Bitmap ico1White, ico1Blue; 
    } 
    public static CacheGraphics cacheGraphics;` 
    
  • Cache иконки:

    cacheGraphics.ico1White = new Bitmap(GetIconImage("ico1", Color.White)); 
    cacheGraphics.ico1Blue = new Bitmap(GetIconImage("ico1", Color.Blue));` 
    
  • Написать вспомогательную функцию, которая изменяет цвет фона:

    private static Bitmap GetIconImage(string szIcon, Color clrBackground) 
    { 
        // Convert an embedded icon into an image 
    
        // Load icon 
        string szImage = ("YOUR-PROJECT.Resources.Icons." + szIcon + ".ico"); 
        Assembly _assembly = Assembly.GetExecutingAssembly(); 
        Stream file = _assembly.GetManifestResourceStream(szImage); 
        Icon icoTmp = new Icon(file); 
    
        // Create new image 
        Bitmap bmpNewIcon = new Bitmap(icoTmp.Width, icoTmp.Height, PixelFormat.Format32bppRgb); 
    
        // Create a graphics context and set the background colour 
        Graphics g = Graphics.FromImage(bmpNewIcon); 
        g.Clear(clrBackground); 
    
        // Draw current icon onto the bitmap 
        g.DrawIcon(icoTmp, 0, 0); 
    
        // Clean up... 
        g.Dispose(); 
    
        // Return the new image 
        return bmpNewIcon; 
    } 
    
  • Define простой псевдоним для каждого значка:

    // Alias which goes at the top of any file using icons: using icons = YOUR-PROJECT.CCommon.AppIcons; 
    public enum AppIcons 
    { 
        ICO1_WHITE, 
        ICO1_BLUE 
    } 
    
  • Написать вспомогательную функцию, чтобы вернуть кэшированные значок по запросу:

    public static Image GetCachedIcon(AppIcons eIcon) 
    { 
        // Return a cached icon image. These icons are cached at application startup. 
        Image imgIcon = null; 
        switch (eIcon) 
        { 
         // System Settings > Advanced 
         case AppIcons.ICO1_WHITE: 
          imgIcon = (Image)cacheGraphics.ico1White; break; 
         case AppIcons.ICO1_BLUE: 
          imgIcon = (Image)cacheGraphics.ico1Blue; break; 
        } 
    
        return imgIcon; 
    } 
    
  • Используйте значок, когда требуется:

    picturebox1.Image = CCommon.GetCachedIcon(icons.ICO1_WHITE); 
    picturebox2.Image = CCommon.GetCachedIcon(icons.ICO1_BLUE); 
    
+0

AlainD Не говорите мне, как исправить ошибку после перезагрузки, потеряв ярлыки с рабочего стола. Поэтому, если вы устанавливаете программу в Program Files, программа также исчезает. Но если программа установлена ​​в системную папку, она сохраняется. Но как обеспечить, чтобы метки все еще не понимали. – Macro

+0

@Macro: устройства Windows CE имеют фиксированный сегмент защиты от записи и пользовательскую область. Вам нужно поместить свои собственные программы и ярлыки в пользовательскую область. Рабочий стол обычно не является областью пользователя, и любые ярлыки, которые вы там помещаете, будут удалены при перезагрузке. Чтобы программа запускалась автоматически, вы можете либо поместить ее в папку 'DEVICE-USER-AREA \ Start', либо в реестр в' HKLM \ init \ LaunchXXX'. Это отдельный вопрос к вашему оригиналу, поэтому вам нужно искать ответы или задавать другой вопрос. Надеюсь, это поможет. – AlainD

+0

AlainD Я создал тему – Macro

Смежные вопросы