Une classe bouton bitmap pour c++/mfc (très simple à utiliser)

Soyez le premier à donner votre avis sur cette source.

Vue 11 577 fois - Téléchargée 1 153 fois

Description

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 / Exemple :


// 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...

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
54
Date d'inscription
vendredi 13 avril 2007
Statut
Membre
Dernière intervention
26 juillet 2011

Salut !

Mon code est correct ?
Je vais essayer avec une image de 32 bits et je confirmerai si ça marche !
OK !
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
24
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...
Messages postés
54
Date d'inscription
vendredi 13 avril 2007
Statut
Membre
Dernière intervention
26 juillet 2011

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
Messages postés
536
Date d'inscription
mercredi 27 avril 2005
Statut
Membre
Dernière intervention
22 août 2008

merci beaucoup, c'est noté
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
24
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...
}
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.