Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

UNE CLASSE BOUTON BITMAP POUR C++/MFC (TRÈS SIMPLE À UTILISER)


Information sur la source

Catégorie :Graphique Classé sous : bouton, bitmap, mfc, classe, controle Niveau : Débutant Date de création : 06/08/2006 Date de mise à jour : 06/08/2006 15:31:16 Vu / téléchargé: 6 773 / 808

Note :
Aucune note

Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Personnaliser simplement les boutons en c++. Une fois la classe intégré à votre projet, vous pourrez gérer la couleur du libellé, l'image et son étendu sur le bouton, un vrai texte à coté de l'image, le grisé, l'effet mouseMove et le redimentionnement automatique de l'image selon la taille du bouton.
Sans oublier le masque pour la transparence.
Un exemple complet et commenté, avec tous les cas de figure dans le zip.
 

Source

  • // Utilisation
  • // declare
  • CBtnBitmap* m_pBtn;
  • // alloue
  • m_pBtn = new CBtnBitmap(IDB_NORMAL, _T("texte !"), RGB(0,0,255));
  • // par défaut le taux de remplissage est un tier, on peut le changer
  • m_pBtn->SetTauxRemplissageImg(REMPLIR_MOITIE)
  • // On peut gérer le grisé ou non
  • m_pBtn->SetIDBitmapGris(IDB_GRISE);
  • // On peut gérer le mouseMove ou non
  • m_pBtn->SetIDBitmapMouseMove(IDB_MOUSEMOVE);
  • // On peut gérer le masque de transparence
  • m_pBtn->SetIDBitmapMasque(IDB_MASQUE);
  • // On peut gérer le redimentionnement automatique
  • m_pBtn->SetStretch(true);
  • // On peut changer la couleur à l'exécution
  • m_pBtn->SetCouleurTexte(RGB(255,0,0));
  • // pour texte et pour grisé à l'exécution (fn windows)
  • m_pBtn->SetWindowText((LPCTSTR));
  • m_pBtn->EnableWindow(FALSE);
  • // dans l'init du dialog parent ou le template est posé
  • // il faut sousclasser le bouton
  • m_pBtn->SubClassDlgItem(IDC_BTN, this);
  • // Ne pas oublier de désallouer le btn (delete)
// Utilisation
// declare
CBtnBitmap* m_pBtn;
// alloue
m_pBtn = new CBtnBitmap(IDB_NORMAL, _T("texte !"), RGB(0,0,255));
// par défaut le taux de remplissage est un tier, on peut le changer
m_pBtn->SetTauxRemplissageImg(REMPLIR_MOITIE)
// On peut gérer le grisé ou non
m_pBtn->SetIDBitmapGris(IDB_GRISE);
// On peut gérer le mouseMove ou non
m_pBtn->SetIDBitmapMouseMove(IDB_MOUSEMOVE);
// On peut gérer le masque de transparence
m_pBtn->SetIDBitmapMasque(IDB_MASQUE);
// On peut gérer le redimentionnement automatique
m_pBtn->SetStretch(true);
// On peut changer la couleur à l'exécution
m_pBtn->SetCouleurTexte(RGB(255,0,0));
// pour texte et pour grisé à l'exécution (fn windows)
m_pBtn->SetWindowText((LPCTSTR));
m_pBtn->EnableWindow(FALSE);

// dans l'init du dialog parent ou le template est posé
// il faut sousclasser le bouton
m_pBtn->SubClassDlgItem(IDC_BTN, this);

// Ne pas oublier de désallouer le btn (delete)

Conclusion

Pour les débutants qui viennent du VisualBasic, cette classe fera retrouver la simplicité que l'on doit avoir pour agrémenter un gui sans passer par la reflection ou les messages obscurs comme MEASUREITEM, DRAWITEM, ERASEBKG ect...
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

06 août 2006 15:31:16 :
Suite au commentaire, Ajout de l'exe (.ex_) pour ceux qui ne peuvent pas compiler.

Commentaires et avis

signaler à un administrateur
Commentaire de MuPuF le 06/08/2006 11:32:30

Bonjour cette source m'interesse énormément, je suis en frain de faire une librairie permettant de gerer des skins a partir d'un XML (toutes les infos sur la fenetre sont dans le xml un peu comme pour les dialogues et les ressources). Et justement, il me fallait quelque chose du genre, maintenant il me reste plus qu'a voir comment marche les menus et les boutons owner drawn.

signaler à un administrateur
Commentaire de MuPuF le 06/08/2006 11:38:54

Re
Tu pourrais mettre l'exe (renommé en .ex_) s'il te plait, car il me manque une entente, je ne travaille pas en MFC et j'aimerais voir le résultat.
Sinon, la source est claire et bien commenté, je devrais pouvoir m'en sortir lol, sinon, sachez qu'il existe un super tuto sur msdn.

signaler à un administrateur
Commentaire de yann_lo_san le 06/08/2006 15:57:15

Pour MuPuf, concernant les menus (toujours en MFC).

// Dans le MainFrame.h
// Les index bitmap (autant que necessaire)
enum eIndexImages { M_NEW = 0, M_OPEN, M_AUTONUMBER };
// Les bitmap
CBitmap m_menuImages[M_AUTONUMBER];

// Dans le MainFrame.cpp, Méthode OnCreate()
// Attache les images aux menus
CMenu* mainMenu = GetMenu();
CMenu* subMenu = NULL;

if( mainMenu )
{
  // Référence le menu [fichier] (indice 0)
  subMenu = mainMenu->GetSubMenu(0);
  if( subMenu )
  {
    // Menu Nouveau (charge ressource et affecte)
    if( m_menuImages[M_NEW].LoadBitmap(IDB_MNU_NEW) )
      subMenu->SetMenuItemBitmaps(ID_FILE_NEW,
                                  MF_BYCOMMAND,
             &m_menuImages[M_NEW],
                                  NULL);
    // Menu Ouvrir (idem)
    if( m_menuImages[M_OPEN].LoadBitmap(IDB_MNU_OPEN) )
      subMenu->SetMenuItemBitma(ID_FILE_OPEN,            
                                MF_BYCOMMAND,
        &m_menuImage[M_OPEN],
                                NULL);
  }

  // Passer au menu suivant [affichage] (indice 1)
  subMenu = mainMenu->GetSubMenu(1);
  // Ect...
}

signaler à un administrateur
Commentaire de MuPuF le 06/08/2006 22:04:53

merci beaucoup, c'est noté

signaler à un administrateur
Commentaire de randriano le 18/08/2007 16:36:34

Votre programme est génial, ça marche mais pour utiliser la classe CBtnBitmap dans un nouveau projet, j'ai fait comme suit:

Ajouter un attribut de type CBtnBitmap * dans la classe dialogue => m_pBtnFermer

Dans le constructeur
m_pBtnFermer = new CBtnBitmap(IDB_AKATONY, _T("OnOK()"));
m_pBtnFermer->SetStretch(true);

Dans OnInitDialog, une sorte de main() en MFC:
m_pBtnFermer->SubclassDlgItem(ID_AKATONY, this);
Avec ID_AKATONY l'ID d'un bouton existant à surcharger une image

Dans le destructeur du dialogue
if( m_pBtnFermer )  delete m_pBtnFermer;

Et ben, aucun changement sur mon bouton à ID = ID_AKATONY

signaler à un administrateur
Commentaire de yann_lo_san le 31/08/2007 21:48:32

Salut,

Il est possible que ton ID de ressource ne soit pas bon ou pas pris en compte comme il faut.

OU alors tu utilises des images 8 bits ou 16 bits, dans ce cas, essayes avec une image 32 bits.

A plus...

signaler à un administrateur
Commentaire de randriano le 02/09/2007 14:29:19

Salut !

Mon code est correct ?
Je vais essayer avec une image de 32 bits et je confirmerai si ça marche !
OK !

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Mettre une bitmap sur un bouton (MFC,VC++) [ par JMGR ] Comment peut - on mettre une image sur un bouton ?Mon code qui ne fonctionne pas :HBITMAP bimp= LoadBitmap(NULL,"bitmaps\\un.bmp");m_x0y0.SetBitmap(bi Boite de dialogue MFC [ par julok2 ] Salut,j'écris actuellement un programme dans lequel j'ouvre des boites de dialogue. J'ai donc créé des fonctions OnBouton dans une autre classe où j'u Pb avec CBitmapButton [ par punx120 ] Salutj'ai un problème avec CBitmapButton, je veux créer un bouton avec un bitmap je fais comme ceci mais ça ne marhce pas (j'ai visual c++ 6.0): dans Utiliser la classe MFC CHtmlEditCtrl [ par appstmd ] Salut !Quelqu'un sait-il comment on fait pour spécifier le contenu d'un contrôle CHtmlEditCtrl sans passer par une adresse Internet ou un fichier HTML Imprimer un bitmap sans MFC ( API Win32 ) [ par bebel6 ] Bonjour à tous tout d'abord !Alors voila le bin'z :J'aimerais pouvoir imprimer une image avec vsiualc 6 sans l'aide des MFC, j'arrive deja à imprimer Insérer bitmap dans un bouton dans une boite de dialogue [ par safira ] safira:)Salut! Je suis nouvelle dans ce forum! J'aimerais savoir comment mettre un bitmap dans bouton qui se trouve dans une boite de dialogue avec MF controle du volume audio général [ par roxanic ] BonjourJe cherche a controler les bouton de volume.Pour le bouton Wave c'est OK. Mais je ne trouve pas le solution pour le curseur du volume général.M MFC : bitmap [ par lavionneur ] Bonjour a tous , je suis nouveau sur ce forum.je suis en projet de fin d'année et je voudrais savoir comment on fait pour :rendre visible ou invisible MFC mettre un controle invisible [ par Cameleon69 ] J'ai un controle ComboBox, que je veux rendre invisible, je sais le rendre inactif mais invisible ???Merci de votre aide. État d'un bouton MFC [ par NiFF ] Bonjour tout le monde.Comment fait-on pour changer l'état d'un bouton? J'ai créé sur ma feuille MFC un bouton avec la propriété "Disabled". Comment fa


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,858 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.