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

Windows Discussion :

Icone ne s'affichant pas dans la barre de titre


Sujet :

Windows

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 180
    Points : 90
    Points
    90
    Par défaut Icone ne s'affichant pas dans la barre de titre
    Bonjour à tous,

    Je rencontre une petit problème au niveau des icones : mon icone s'affiche bien partout, comme je veux SAUF dans la barre des titres, dans le coin en haut à gauche de la fenêtre (quand on la regarde de face).

    J'ai bel et bien créé une classe de fenetre:

    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
                    WNDCLASSEX cPrincipale=
                    {
                       sizeof(WNDCLASSEX),
                       CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS,
                       procFenPrincipale,
                       0,
                       0,
                       hAppInstance,
                       LoadIcon(hAppInstance,"ICONE"),
                       LoadCursor (NULL, IDC_ARROW),
                       (HBRUSH) COLOR_BACKGROUND,
                       NULL, //Pas de menu en ressource pour l'instant, à revoir
                       "classe_principale",
                       LoadIcon(hAppInstance,"ICONE")
                    };
    Je ne comprends pas ce qui se passe.
    Peut-être que cela vient des options de ma fenetre pourtant je n'ai rien trouvé la dessus dans la doc de l'ApiWin32.

    Au cas ou cela pourrait venir de là, voila ce que j'ai mis en premier argument de mon CreateWindowEx : '0', et au troisième :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WS_MAXIMIZE|WS_SYSMENU|WS_MINIMIZEBOX|WS_CAPTION|WS_OVERLAPPED|WS_MAXIMIZEBOX
    Voila.

    Merci d'avance de votre aide!

    Spartan03

  2. #2
    CGi
    CGi est déconnecté
    Expert éminent
    Avatar de CGi
    Inscrit en
    Mars 2002
    Messages
    1 045
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 1 045
    Points : 8 258
    Points
    8 258
    Par défaut
    Ton fichier ressources est t'il bien liée au projet ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 180
    Points : 90
    Points
    90
    Par défaut
    Je crois.

    Je travaille sous devC++ qui n'accepte pas les include sur les ressources mais du moment que mon fichier .rc est inclus dans le projet - et c'est le cas- ça marche et le fichier est considéré comme lié. (Je n'ai jamais rencontré de problèmes pour les bitmaps et les waves jusqu'à maintenant)

    En fait, je pensais que vu que l'icone s'affiche dans la barre des taches et sur mon executable (je veux dire par là que c'est l'icone du fichier "monprog.exe") le problème venait d'ailleurs mais d'où... Bonne question!

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    hum... dès qu'un exécutable possède une icône, elle apparait dans l'explorateur.
    Pour ce qui est de la barre des tâches, il me semble que l'icône de l'exécutable y est mise par défaut par Windows XP.

    Ainsi, si tu n'as pas d'icône pour la fenêtre, c'est que l'icône n'a pas correctement été liée à la classe de fenêtre.
    Je pense que tu devrais contrôler le résultat de LoadIcon().

    De plus, LoadIcon() ne marche bien que pour l'icône en 32*32.
    Pour charger l'icône "petite" (16*16), tu devrais utiliser LoadImage() à la place, qui permet de spécifier la taille.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 180
    Points : 90
    Points
    90
    Par défaut
    OOOOOOOOOOOOOokkkkkkkkkkkkkk!!


    Merci beaucoup, grâce à toi j'ai trouvé!

    Mon icone est en 16x16,
    Avant de mettre le sujet sur résolu je teste quand même si ça marche bien avec une icone en 32x32!

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 180
    Points : 90
    Points
    90
    Par défaut
    Euh... vous me taperez pas si je vous dis que ça marche pas parce que...ça marche pas!!!
    Et je vois vraiment pas pourquoi ça bugue.
    J'ai remis mon icone en 32*32, elle porte bien l'extenson .ico.
    Je vois pas d'ou ça peut venir.
    Ah, au fait, mon icone comporte des zones transparantes peut-être que ça vient de là.
    En tout cas je suis complètement largué pour l'instant.
    J'ai essayé de modifier certaines options de la fenetre mais rien à faire!

    Le pire c'est que quand je met LoadIcon(NULL, IDI_QUESTION) ça marche!!! Sauf que
    j'en veut pas de leur icone moi. Je veux le mien, perso (et tout pas beau).

    Je vais essayer avec un icone simple, sans transparence.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Un truc que je te conseille, c'est mettre l'icône dans les deux formats (16*16 et 32*32) dans le même .ico (il faut un bon éditeur d'icônes pour ça, si tu n'as pas Visual).

    Ensuite, je suppose que tu l'ajoutes aux ressouces avec le bon nom... (Je ne peux pas détailler, il me semble qu'il n'y a plus d'éditeur de ressources dans Dev-C++)

    Ensuite, le mieux est de tester à part le LoadIcon() ou LoadImage(), jusqu'à trouver la combinaison qui n'échoue pas...

    Si tu arrives à trouver les bons paramètres pour avoir un HICON valide, si tu mets celui-ci dans la WNDCLASSEX, ça devrait marcher.

  8. #8
    CGi
    CGi est déconnecté
    Expert éminent
    Avatar de CGi
    Inscrit en
    Mars 2002
    Messages
    1 045
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 1 045
    Points : 8 258
    Points
    8 258
    Par défaut
    Citation Envoyé par Médinoc
    hum... dès qu'un exécutable possède une icône, elle apparait dans l'explorateur.
    La question était bien pour la barre de titre, je me trompe pas !

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Sa question était pour la fenêtre, mais ma réponse expliquait une des raisons de ceci:
    En fait, je pensais que vu que l'icone s'affiche dans la barre des taches et sur mon executable

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 180
    Points : 90
    Points
    90
    Par défaut
    Ok merci, je vais tester toutes ces combinaisons et voir laquelle est la bonne.
    Le problème c'est que LoadImage() ne renvoie pas un HICON mais un HANDLE.
    Donc, même si je fais un forçage de type ça ne marche pas. Je vais essayer, peut-être que cela vient de mon icone faut-il que je désactive la transparence, que je la mette en 256 couleurs?

    Je vais rééssayer.

    Ah au fait, comme éditeur d'icone j'utilise SnIcoEdit, ça ne pose pas de problèmes???

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    LoadImage()
    Avec des icones, ça s'emploie ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    HICON hIconSmall, hIconLarge;
    
    hIconSmall = (HICON)LoadImage(hInstance, "MONICONE", IMAGE_ICON,
     GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR);
    if(hIconSmall==NULL)
    	MessageBox(NULL, "Erreur chargement petite icone", NULL, MB_OK | MB_ICONERROR);
    
    hIconLarge = (HICON)LoadImage(hInstance, "MONICONE", IMAGE_ICON,
     GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), LR_DEFAULTCOLOR);
    if(hIconLarge==NULL)
    	MessageBox(NULL, "Erreur chargement grande icone", NULL, MB_OK | MB_ICONERROR);
    (en remplaçant "MONICONE" par le nom de la ressource icône ou par son identificateur numérique)

    Pour l'éditeur d'icône: Je ne sais pas ce dont il est capable: Il peut faire des icônes multitailles?

    Autre chose: tu peux poster la partie correspondante de ton fichier .rc (ainsi que la partie correspondante de ton resource.h s'il y en a une) ?

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 180
    Points : 90
    Points
    90
    Par défaut
    Mon Editeur d'icone est un Freeware, Il peu faire des icone de différentes tailles (16x16,32x32,48x48) gérant ou non la transparence, monochromes, en 16 couleurs, 256 couleurs, en 24 bits, en 24 bits + 8 bits pour la transparence.
    Voila!

    Sinon mon .rc est fait comme ça mon .rc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (HICON)LoadImage(hInstance, "MONICONE", IMAGE_ICON,
     GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR);

  13. #13
    CGi
    CGi est déconnecté
    Expert éminent
    Avatar de CGi
    Inscrit en
    Mars 2002
    Messages
    1 045
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 1 045
    Points : 8 258
    Points
    8 258
    Par défaut
    Sinon mon .rc est fait comme ça mon .rc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (HICON)LoadImage(hInstance, "MONICONE", IMAGE_ICON, 
     GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR);
    ???
    Ce n'est pas un fichier script de ressources ça !

    Il serai beaucoup mieux comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MONICONE ICON icone.ico

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 180
    Points : 90
    Points
    90
    Par défaut
    Oups! Quel ***, ça m'apprendra à me relire!

    Mon fichier .rc est fait comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include <windows.h>
    
    APPICON ICON "VL.ico"
    Il ne faut pas mettre les guillements??

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 180
    Points : 90
    Points
    90
    Par défaut
    effectivement ça marche aussi sans les guillements, enfin ça ne renvoie pas d'erreur à la compilation parce que pour ce qui est de marcher...

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Finalement, tes appels à LoadImage, ils renvoient NULL tous les deux?

    Mon conseil, après un mauvais retour: GetLastError() puis FormatMessage() pour afficher ensuite le message d'erreur dans la console ou une MessageBox()


    PS: Je ne te demande pas si ton éditeur peut faire des icônes de différentes tailles (il serait vraiment nul s'il ne pouvait pas), mais s'il peut le faire dans le même fichier .ico (La plupart des icônes Windows sont comme ça)

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 180
    Points : 90
    Points
    90
    Par défaut
    Ca y'est, je crois enfin que j'ai compris la source du problème! Mais comment la résoudre ça je n'en sais rien!
    J'ai crée une variable HINSTANCE hAppInstance qui porte sur toute mon application. Lors de l'éxécution du WinMain()
    Je lui donne la valeur de l'argument 2 de la Fonction WinMain(). Le problème c'est que je déclare ma classe
    (Attention! je la déclare mais ne l'enregistre pas!) avant le WinMain, dans un header.
    Lors de la déclration de la classe, hAppInstance n'a pas encore la valeur que lui donne Windows en argument 2 de la fonction WinMain()!

    Voila, j'ai essayé un mini projet avec une classe de fenetre déclarée au sein du WinMain() et ça marche!
    J'aimerais cepandant savoir s'il existe une solution pour déclarer cette ****** de classe hors du WinMain.
    Pour ce programme ça ne pose aucun problème mais pour d'autres classes utilisées plusieurs fois, ça irai mieux comme cela!

    Voila, merci d'avance!

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Euh... minute: si tu déclares la classe hors du WinMain(), les fonctions LoadIcon LoadCursor etc., sont-elles seulement appelées? (en C, je ne pense pas: en C++, je pose la question)

    Pour moi, si tu dois faire appel à des fonctions (comme ici) pour initialiser les éléments de la classe, mon conseil, c'est de le faire dans une fonction appelée par WinMain... (d'ailleurs, c'est ce que fait le hello world de VIsual)

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 180
    Points : 90
    Points
    90
    Par défaut
    Ben voila : je déclare ma WNDCLASSEX dans un fichier header.h et le WinMain est dans main.cpp! Bien sur j'enregistre la classe dans le WinMain().

    D'ailleurs la fonction LoadIcon marche très bien avec IDI_QUESTION hors du main!

    Préscision je ne déclare pas ma classe élément par éléments comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ...
    
    wincl.hIconSm =                    &#40;HICON&#41;LoadImage&#40;hThisInstance, "ICONIC", IMAGE_ICON,
     GetSystemMetrics&#40;SM_CXSMICON&#41;, GetSystemMetrics&#40;SM_CYSMICON&#41;, LR_DEFAULTCOLOR&#41; ;
        wincl.hCursor = LoadCursor &#40;NULL, IDC_ARROW&#41;;
    
    ...
    mais comme cela :
    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
    WNDCLASSEX cPrincipale=
                    &#123;
                       sizeof&#40;WNDCLASSEX&#41;,
                       CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS,
                       procFenPrincipale,
                       0,
                       0,
                       hAppInstance,
                       &#40;HICON&#41;LoadImage&#40;hAppInstance, "APPICON", IMAGE_ICON,
     GetSystemMetrics&#40;SM_CXSMICON&#41;, GetSystemMetrics&#40;SM_CYSMICON&#41;, LR_DEFAULTCOLOR&#41; ,
                       LoadCursor &#40;NULL, IDC_ARROW&#41;,
                       &#40;HBRUSH&#41; COLOR_BACKGROUND,
                       NULL, //Pas de menu en ressource pour l'instant, à revoir
                       "classe_principale",
                         &#40;HICON&#41;LoadImage&#40;hAppInstance, "APPICON", IMAGE_ICON,
     GetSystemMetrics&#40;SM_CXSMICON&#41;, GetSystemMetrics&#40;SM_CYSMICON&#41;, LR_DEFAULTCOLOR&#41; 
                    &#125;;
    C'est le seul moyen pour que ça marche dans un header (en c++ en tout cas).

    Non,je ne pense pas que le problème vienne de là. Il vient plutôt de l'instance du programme que je passe en argument est qui n'est pas encore initialisée au moment de l'appel de LoadImage();

    Voila.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Ben oui.
    D'ailleurs, tu ne devrais PAS la DÉFINIR dans un header: En règle générale, on ne définit pas des données dans un header (il y a des compilos qui te sortiront une erreur à l'édition de liens, à commencer par Visual).

    Le mieux est de déclarer une fonction qui l'initialise et l'enregistre, de définir cette fonction bien au chaud dans un fichier source, et d'appeler cette fonction depuis WinMain().

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2007] Code barre ne s'affiche pas dans un textbox suite a un scan
    Par matik dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/06/2012, 23h30
  2. Ne s'affiche pas dans la barre des taches
    Par jderam dans le forum MFC
    Réponses: 2
    Dernier message: 02/06/2009, 14h22
  3. Noms des colonnes ne s'affichent pas dans un JTable
    Par Bourdet dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 07/07/2005, 15h26
  4. Une valeur ne s'affiche pas dans un champ texte
    Par KibitO dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/03/2005, 20h42
  5. Ajouter une icone dans la barre des titres (cme emule)
    Par Crisanar dans le forum Windows
    Réponses: 7
    Dernier message: 12/12/2004, 12h08

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