2016-12-13 4 views
0

J'ai trouvé des exemples d'utilisation de transparence avec une image d'arrière-plan, mais cette option ne me convient pas. Comme il est supposé que l'arrière-plan va changer sur certaines actions.Comment utiliser l'image transparente dans WinCe 5.0?

+0

Quel langage de programmation utilisez-vous? Par exemple C# .NET 2.0/3.5 CompactFramework ou C++ intégré. – AlainD

+0

C# 3.5 CompactFramework – Macro

+0

Peut-être ajouter cela à la question (avec mon hypothèse de Visual Studio 2008 ainsi) et nous pouvons supprimer ces commentaires. – AlainD

Répondre

1

Vous ne savez pas exactement ce que vous faites car les détails sont légers, mais espérons que cela vous sera utile. Nous utilisons des fichiers d'icônes (.ico) avec la transparence comme suit. Ceux-ci changent juste l'arrière-plan à une seule couleur. Si vous avez besoin d'un comportement plus complexe, cela peut ne pas convenir.

  • Ajoutez des icônes (avec des arrière-plans transparents) à votre projet. Définissez Build Action comme Embedded Resource. Dans l'exemple ci-dessous, nous utilisons une icône appelée ico1.ico.

  • Définissez une structure pour contenir vos icônes. Selon le nombre de couleurs d'arrière-plan dont vous avez besoin, il existe une instance pour chaque combinaison icône/couleur dont vous avez besoin. Si le nombre est très grand ou inconnu au moment de la conception, vous devrez créer les icônes à la volée.

    public struct CacheGraphics 
    { 
        public Bitmap ico1White, ico1Blue; 
    } 
    public static CacheGraphics cacheGraphics;` 
    
  • Cache les icônes:

    cacheGraphics.ico1White = new Bitmap(GetIconImage("ico1", Color.White)); 
    cacheGraphics.ico1Blue = new Bitmap(GetIconImage("ico1", Color.Blue));` 
    
  • Ecrire une fonction d'assistance qui modifie la couleur de fond:

    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; 
    } 
    
  • Définir un alias simple pour chaque icône:

    // Alias which goes at the top of any file using icons: using icons = YOUR-PROJECT.CCommon.AppIcons; 
    public enum AppIcons 
    { 
        ICO1_WHITE, 
        ICO1_BLUE 
    } 
    
  • Ecrivez une fonction d'assistance pour retourner l'icône en cache sur demande:

    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; 
    } 
    
  • Utiliser l'icône lorsque cela est nécessaire:

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

AlainD Ne me dites pas comment corriger le bogue après un redémarrage perdu les raccourcis du bureau. Donc, si vous installez le programme dans Program Files, le programme disparaît également. Mais si le programme est installé dans le dossier System, il est stocké. Mais comment faire en sorte que les étiquettes ne soient toujours pas comprises. – Macro

+0

@Macro: les périphériques Windows CE disposent d'un segment protégé en écriture et d'une zone utilisateur. Vous devez mettre vos propres programmes et raccourcis dans la zone utilisateur. Le bureau n'est généralement PAS une zone utilisateur et les raccourcis que vous y mettez seront supprimés au redémarrage. Pour démarrer un programme automatiquement, vous pouvez le placer dans votre dossier 'DEVICE-USER-AREA \ Start' ou dans le registre' HKLM \ init \ LaunchXXX'. Ceci est une question distincte à votre question d'origine, vous aurez donc besoin de chercher des réponses ou de poser une question différente. J'espère que cela pourra aider. – AlainD

+0

AlainD J'ai créé un sujet – Macro