2 pièce(s) jointe(s)
resources VS2010 : resXResourceSet() ou ComponentResourceManager() ou GetManifestResourceStream() ?
Bonjour a tous,
Je cale sur l'utilisation des resources en C++/CLI sous VS2010.
Pas mal de doc en VB ou C# mais a chaque fois par utilisation de Stream(s).
Je voudrai betement utiliser une image de presentation dans un layout, Pour cela
_ dans ma solution (.sln) et dans l'IDE
_ je crée un UserControl (C++ Control) que je viens rattacher a un evenement (genre click bouton) pour ouvrir cette fenetre. UserControl mis dans un répertoire Layout qui contient tous les usercontrols de ma solution.
_ dans ce UserControl, je voudrai afficher une image, (genre le logo du projet). Dans le [Design] je crée un PictureEdit (chez DevExpress) ou picturebox plus classique
_ lors du chargement je voudrai lier une image a la picturebox mais sans utiliser un chargement de fichier image sur le disque quelconque.
_ j'ai trouvé 3 solutions dans les divers forums, docs et tutoriaux :
1) celle de Nico
Code:
this->pictureEdit1->Image = Image::FromStream(Reflection::Assembly::GetExecutingAssembly()->GetManifestResourceStream("splashScreen.png"));
en mettant dans Project/Properties/Linker/Input/Embed Managed resource File le lien au fichier Image : F:\Developpement\Resources\Theme\Logo v1.png
ca ok ca fonctionne mais il faut aller dans le "Solution" Property Pages et les options incomprehensibles :-)
2) les deux autres qui ne fonctionnent pas :
en ajoutant un images.resx dans ma solution
et en specifiant poru l'image voulue (splashScreen)
Persistence = Linked at compile time
Code:
1 2 3
|
System::ComponentModel::ComponentResourceManager^ resources = (gcnew System::ComponentModel::ComponentResourceManager());
this->pictureEdit1->Image = (cli::safe_cast<System::Drawing::Image^> (resources->GetObject(L"splashScreen"))); |
ou encore
Code:
1 2 3
|
ResXResourceSet^ resources = gcnew ResXResourceSet("ophResources\images.resx"); // nom du repertoire ou sont les resources du projet
this->pictureEdit1->Image = (cli::safe_cast<System::Drawing::Image^> (resources->GetObject(L"splashScreen"))); |
Aucune des deux ne charge l'image.
Mes deux questions sont simple sans doute mais je ne comprends pas le systeme des resources dans C++/CLI :
a) quelles sont les differences entre chaque systeme de chargement de resource ?
b) comment utiliser un fichier images.resx ou sont contenues toutes les images (pour les boutons, les affichages, les logos etc..) et charger dans un composant les images voulues directement dans ce fichier images.resx.
Image.resx qui serait lui meme lié a l'executable ou dans une dll.
c) dans le pictureedit, si je mets la propriete Image au nom du fichier, il ne se passe rien (sans doute parceque je perds les liens avec le repertoire Debug).
Je veux bien un coup de main ou une explication du systeme car la je m'y perds. Les deux fichiers jpg joints montrent ma solution