IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

[WIN32] LoadIcon partiel?!


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 25
    Par défaut [WIN32] LoadIcon partiel?!
    Re-bonjour,

    J'ai suivi le tutoriel permettant de mettre une icône system tray, cela marche... A moitié. En effet, j'ai bien créé ma ressource IDI_ICON1, sous le fichier "icone.ico", et si cette icône se charge bien dans la dlgbox et dans les message boxes, j'ai une icône ronde rouge barrée de blanc dans la barre des tâches, sur laquelle quand je clique droit, j'ai effectivement mon menu.
    Lorsque je change le tag de l'icone pour une des celles prédéfinies, cela marche dans problème et j'ai une belle icône dans la barre des tâches.

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    HICON hIcon;
    hIcon=LoadIcon(hInst,(LPCTSTR)IDI_ICON1);
    			if(hIcon==NULL)
    			{
    				MsgBox("Impossible de trouver le fichier icone.ico!");
    				Systray.hIcon=LoadIcon(NULL,IDI_WARNING);
    			}
    			else
    			{
    				Systray.hIcon=hIcon;
    			}
    J'ai tenté d'ajouter un MAKINTRESOURCE ainsi que suggeré dans l'aide à la place du IDI_ICON1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LoadIcon(hInst,(LPCTSTR)MAKEINTRESOURCE(IDI_ICON1));
    mais rien n'y fait.
    J'ai aussi tenté avec le nom du fichier (icone.ico), sans plus de résultats.

    Si quelqu'un a une idée... Merci!

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    tu as regardé dans l'editeur si tu avais une icone pour toutes les dimensions ? 16x16 24x24 32x32 ...

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    1° C'est du pinaillage, mais tu n'as pas besoin de (LPCTSTR) quand tu utilises MAKEINTRESOURCE()

    2° Vérifie ton HINSTANCE
    3° Quelles est(sont) la(les) taille(s) de ton icône ? LoadIcon() ne les charge qu'en taille "Normale" (32*32)...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 25
    Par défaut
    L'éditeur ne me permet que d'éditer des icônes de taille 32x32 pixels...

    Mon hInstance est défini dans WinMain dont le code est le suivant :
    (avec HINSTANCE hInst dans mon fichier de déclaration des variables globales).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    #include "appli.h"
     
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int cCmdShow)
    {
    	MSG Msg;
    	hDlgMain=CreateDialog(hInstance,(LPCSTR)IDD_MAIN,NULL,(DLGPROC)DlgProc);
    	hInst=hInstance;
     
    	for(;;)
    	{
    		if(PeekMessage(&Msg,NULL,0,0,PM_NOREMOVE))
    		{
    			if(!GetMessage(
    						  &Msg,
    						  NULL,
    						  0,
    						0
    						)) goto Fin;
    			TranslateMessage(&Msg);
    			DispatchMessage(&Msg);
    			Sleep(10);
    		}
    		else
    		{
    			Sleep(10);
    		}
    	}
    Fin:
    	return 0;
    }
    Et je note le LPCTSTR, je ne sais même pas pourquoi je l'ai mis puisqu'il est défini dans la macro de MAKEINTRESOURCE.

  5. #5
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    Citation Envoyé par Sharingan
    L'éditeur ne me permet que d'éditer des icônes de taille 32x32 pixels...
    faux tu as un selecteur(combobox) qui te permet de passer d'un format a l'autre .
    en visual 6.0 c'est au dessus de l'icone il y a ecrit Device: standard(32x32)

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 25
    Par défaut
    Je me suis mal exprimé : dans le sélecteur, je n'ai de disponible que le format d'icone 32x32 standard. Désolé pour cette ambiguité!

  7. #7
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    Citation Envoyé par Sharingan
    Je me suis mal exprimé : dans le sélecteur, je n'ai de disponible que le format d'icone 32x32 standard. Désolé pour cette ambiguité!
    alors tu clic sur l'icone a droite du selecteur qui permet d'inserer un nouveau format ...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 25
    Par défaut
    Ah oui, tiens.
    Eh mais attends, je m'en fous de ça >_< Ze veux que mon icone marcheuuuuuuh!
    *boude*

  9. #9
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    mais non tu t'en fous pas ,il te faut creer l'icone en 16x16 ...

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 25
    Par défaut
    Rooooh... Ca peut pas être aussi simple! Si? Je regarde...
    Hmm, c'est pas ça non plus. Snif.

  11. #11
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    pour lire l'icone en 16x16 dans mon systeme de systray,
    moi j'ai remplacé loadicon par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    HICON hIcon=(HICON)::LoadImage(AfxFindResourceHandle(MAKEINTRESOURCE(nIDResource),RT_GROUP_ICON),
    					 MAKEINTRESOURCE(nIDResource),
    					 IMAGE_ICON,
    					 16,16,LR_DEFAULTSIZE);

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 25
    Par défaut
    Après essai, c'est encore non, mais j'apporte une nuance : VC++ 6 n'aime pas ton code (je reprécise à tout hasard que je ne suis pas en MFC), il refuse par ailleurs catégoriquement afxFindResourceHandle.
    J'ai tout de même adapté le code pour utiliser la fonction LoadImage, ce qui a donné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    			hIcon=LoadImage(hInst, 
                    MAKEINTRESOURCE(IDI_ICON1), 
                    IMAGE_ICON, 
                    16,
    				16,
    				LR_DEFAULTSIZE);
    Sans plus de succès. Merci de ta réactivité, ô Farscape!

  13. #13
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    l'icône est valide ?
    Parce que moi j'avais ce problème sur le systray en utilisant loadimage je lis bien l'icône en 16x16 .


  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 25
    Par défaut
    Heuuu, qu'est-ce que tu entends par "valide"?
    Si tu penses à la valeur du hIcon, elle est toujours nulle;
    après, au niveau du fichier icon1.ico, j'ai remarqué que je ne voyais pas l'icone en 16x16, mais par contre la 32 par 32 oui (dans l'explorateur).

  15. #15
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    si le retour est null c'est sûr que c'est pas bon.
    tu es sur d'avoir l'icone 16x16 definit ,les ressources correctement compilées etc..?


  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 25
    Par défaut
    Oui oui, j'ai inclus dans l'arborescence des ressources dans l'onglet FileView le fichier icon1.ico, inclus également le fichier resource.h et tutti quanti. Je sens qu'on est au taquet, là...

  17. #17
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    utilises GetLastError() pour voir l'erreur :
    http://c.developpez.com/faq/vc/?page...etLibLastError

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 25
    Par défaut
    (mille excuses pour ce retard de réponse)

    GetLastErreur retourne le code 1813, ce qui correspond d'après l'aide à :

    1813 The specified resource type cannot be found in the image file.

    Ce qui est curieux puisque j'ai pourtant bien ma ressource comportant mon icône...

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 25
    Par défaut
    Ah bah voilà, après avoir fouillé!

    En fait, il apparaît que LoadImage est plus appropriée à mon projet, allez savoir pourquoi. Je l'ai utilisé avec le flag LR_LOADFROMFILE, ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hIcon=LoadImage(hInst,(LPCTSTR)"icon1.ico",IMAGE_ICON,32,32,LR_LOADFROMFILE)
    Et ça marche très bien. Bon, bien sûr il faut avoir le fichier .ico dans le coin... Merci pour ton aide, Farscape!

Discussions similaires

  1. Réponses: 6
    Dernier message: 07/12/2007, 18h31
  2. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  3. [Win32/MASM32] Problème : LoadIcon
    Par lord_kalipsy dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 27/12/2004, 18h44
  4. [API win32] Récupérer le répertoire d'un profile
    Par sbeu dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 27/09/2002, 12h38
  5. convertir un nom long (win32) en format dos (8+3)
    Par kylekiller dans le forum Langage
    Réponses: 2
    Dernier message: 30/08/2002, 13h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo