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] bouton perso


Sujet :

MFC

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Par défaut [WIN32] bouton perso
    Hello !!

    J'ai un petit probleme.. je tente désesperement de créer un bouton personnalisé. Je pensais créer le bouton avec CreateWindow et loader un icon avec loadicon ou quelque chose comme ca mais je ne sais pas cmt m'y prendre ...

    Quelle methode a utiliser, ou les placer dans le programme ???? Faut il rajouter quelque chose dans mon fichier ressources.h ou .rc ???

    Je travail en C sous visual C++ et je n'utilise pas de MFC ni de ressources pour ma fenetre principale....

    Merci d'avance !!!!

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    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 393
    Par défaut
    Eh bien, il te faut d'abord créer le bouton avec les bons styles (BS_IMAGE ou BS_ICON), puis charger l'image/l'icone avec un LoadImage() (tu peux la charger depuis un fichier ou depuis une ressource).

    Ensuite, pour que le bouton possède l'image/l'icone, il suffit de faire un SendMessage() avec BM_SETIMAGE dessus...
    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.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Par défaut
    Oki merci beaucoup !!

    Je viens d'essayer, j'ai mis ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    boutonLecture = CreateWindow("BUTTON","Recherche de flux médias",
    WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_BITMAP | BS_CENTER, 
    0.7*taille_fenetre_principale.largeur, 0.75*taille_fenetre_principale.hauteur, 
    70, 90, hwnd,0,hinst,0); 
     
    LoadImage(hinst, "etherealPlayer.ico", IMAGE_ICON, 48, 48, 
    LR_LOADFROMFILE);
     
    SendMessage(boutonLecture, 
    BM_SETIMAGE, IMAGE_ICON, (LPARAM)hico1);
    Le bouton est vide et aucune image n'est presente ... Ou est ce que j'ai bien pu dérapé ??

    Merci pour l'aide !

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    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 393
    Par défaut
    BS_BITMAP au lieu de BS_ICON...
    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.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Par défaut
    j'ai essayé les deux sans succès...

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Par défaut
    Pour infos, je fais ca dans WM_CREATE....

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Par défaut
    Le probleme est peut etre plus profond car j'utilise aussi des treeview dans mon ihm... Les icon que je charge avec loadIcon se sont affiché au début et ne s'affiche plus maintenant.. mais je vois vraiment pas pk.

    quel peut etre la raison expliquant que mes icon ne s'affiche pas ?? Il peut manqué une libraire un truc dans le style ??

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    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 393
    Par défaut
    Il n'y a pas un problème de répertoire, ou un truc du genre?
    Tu testes le retour de LoadIcon() ou LoadImage() ?

    PS: LoadIcon() a tendance à ne bien charger les icones qu'en 32*32. C'est pourquoi il est souvent préférable d'utiliser LoadImage().
    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.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Par défaut
    Je ne sais pas pour le probleme de rep... J'ai copier mon .ico un peu partout au cas ou.. Pour le retour de loadImage, il est bon.. pas de NULL...

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Par défaut
    voila comment je créé ma fenetre principale... On sait jamais ...

    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
     
     
     hinst = hinstance;
     
        wc.style = CS_HREDRAW|CS_VREDRAW;
        wc.lpfnWndProc = MainWndProc;
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 0;
        wc.hInstance = hinst;
        wc.hIcon = NULL;
        wc.hCursor = LoadCursor(NULL, IDC_ARROW);
        wc.hbrBackground = CreateSolidBrush(RGB(220,220,220));//reinterpret_cast<HBRUSH>(GRAY_BRUSH-1);
        wc.lpszMenuName =  "Menu";
        wc.lpszClassName = "MaWinClass";
     
        if(!RegisterClass(&wc)) return FALSE;	
     
        hwnd = CreateWindow("MaWinClass", "etherealPlayer", WS_OVERLAPPEDWINDOW, 250, 100, 800, 800,
    NULL, NULL, hinstance, NULL);
     
         if (!hwnd)  return FALSE;
     
    ShowWindow(hwnd, nCmdShow);

  11. #11
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    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 393
    Par défaut
    L'erreur dans ton post de 11h21, tu l'as corrigée depuis ?

    (Il manquait un hico1 = devant l'appel à LoadImage())
    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.

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Par défaut
    je l'avai mis mais le loadImage renvoi un handle.....

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Par défaut
    C'est bon, ca marche !!!!

    C'est super cool, ca faisait longtmp que je cherchais !


    Merci encore !

  14. #14
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    bah euh tu voudrais avoir quoi à la place d'un handle ? un handle c'est le four-tout en windows ca correspond un peu aux int pour les descripteurs en linux

  15. #15
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    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 393
    Par défaut
    En fait, LoadImage devrait renvoyer un HGDIOBJ au lieu d'un HANDLE.

    Le fourre-tout de GDI, c'est HGDIOBJ, alors que HANDLE est supposé être un type précis (équivalent Windows du descripteur de fichiers). Enfin, les deux sont en typedef void*, mais bon...
    Ce serait mieux si l'API était en C++, ainsi on pourrait avoir des vraies classes imaginaires avec un vrai héritage pour les pointeurs...


    hiko-seijuro: gdpasmini s'attendait à un HICON et non un HGDIOBJ
    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.

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Par défaut
    En effet, je m'attendais a un HICO comme pour la methode loadIcon...

    En tout cas, merci encore !!

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Par défaut
    Par contre, sans vouloir abuser, le texte, n'apparait plus... je n'ai plus que l'icone ! lol

  18. #18
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    suffit de caster alors ?

  19. #19
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    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 393
    Par défaut
    Ben oui... Un bouton est soit icône, soit texte. À moins d'un bricolage ou d'un truc spécial, on n'est pas supposé avoir les deux.
    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.

  20. #20
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    essaie en mettant un label transparent "au dessus" de ton bouton

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

Discussions similaires

  1. [XL-2010] Probleme bouton perso vba menu contextuel
    Par Ashireon dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 08/10/2014, 07h37
  2. scintillement boutons perso
    Par TOMITOMAS dans le forum IHM
    Réponses: 1
    Dernier message: 10/12/2012, 22h14
  3. GUI Bouton perso
    Par fjxokt dans le forum Interfaces Graphiques en Java
    Réponses: 5
    Dernier message: 26/11/2007, 20h06
  4. [VBA-E] Bouton perso dans menu standard
    Par electrosat03 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/01/2007, 17h09
  5. Api Win32 : boutons "qui bougent" au passage de la
    Par Spartan03 dans le forum Windows
    Réponses: 9
    Dernier message: 06/06/2005, 23h52

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