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

Contribuez C++ Discussion :

[FAQ][VC++]Comment appliquer text, image, style, curseur et info bulle sur un bouton


Sujet :

Contribuez C++

  1. #1
    Membre éprouvé
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Points : 1 128
    Points
    1 128
    Par défaut [FAQ][VC++]Comment appliquer text, image, style, curseur et info bulle sur un bouton
    J'ai une boite de dialogue par exemple CMyDlg qui dérive communément de CDialog.
    J'ai un bouton par exemple le bouton OK sur la dialogue à partir des ressources auquel je mappe une variable CButton.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class CMyDlg : public CDialog
    {
    //...
          protected:
    	CButton m_OkBtn;
    Ce que je voudrais faire c'est de mettre une image avec du texte sur le bouton OK en lui appliquant un style particulier.

    D'abord je remplace CButton en CMFCButton.
    Ensuite dans le code d'initialisation de ma dialogue OnInitDialog() j'ai le code suivant :
    1. Je choisit le style du bouton soit plat, semi-plat ou en 3D
    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
     
    	int iBorderStyle = 2;  // style de la bordure
    	switch (iBorderStyle)
    	{
    	case 0:  // bouton tout plat
    		m_OkBtn.m_nFlatStyle = CMFCButton::BUTTONSTYLE_FLAT;
     
    		break;
     
    	case 1:  // bouton semi plat
    		m_OkBtn.m_nFlatStyle = CMFCButton::BUTTONSTYLE_SEMIFLAT;
    		break;
     
    	case 2:  // bouton en 3D
    		m_OkBtn.m_nFlatStyle = CMFCButton::BUTTONSTYLE_3D;
    	}
    2. Je choisit si le bouton affiche soit du text, soit une image ou les deux
    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
     
    	int iTextImage = 2;  // text + image du bouton
    	switch (iTextImage)
    	{
    	case 0:  // bouton sans image avec text
    		m_OkBtn.SetImage((HBITMAP) NULL);   // image non
    		m_OkBtn.SetWindowText(_T("YES"));   // text oui
    		break;
     
    	case 1:  // bouton sans text avec image
    		if (afxGlobalData.bIsOSAlphaBlendingSupport)  // avec support des bitmap sur 32 bits?
    			m_OkBtn.SetImage(IDB_BTN1_32, IDB_BTN1_HOT_32);  // image oui 
    		else
    			m_OkBtn.SetImage(IDB_BTN1, IDB_BTN1_HOT); // image oui
     
    		m_OkBtn.SetWindowText(_T(""));   // text non
    		break;
     
    	case 2:  // bouton avec text et image
    		if (afxGlobalData.bIsOSAlphaBlendingSupport)  // avec support des bitmap sur 32 bits?
    			m_OkBtn.SetImage(IDB_BTN1_32, IDB_BTN1_HOT_32);  // image oui 
    		else
    			m_OkBtn.SetImage(IDB_BTN1, IDB_BTN1_HOT); // image oui
     
    		m_OkBtn.SetWindowText(_T("YES"));   // text oui
    		break;
    	}
    3. Je choisit l'alignement du text et de l'image sur le bouton
    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
     
    	int iImageLocation = 0;  // alignement du text et de l'image sur le bouton
    	switch (iImageLocation)
    	{ 
    	case 0:  // Image à gauche du text
    		m_OkBtn.m_bRightImage = FALSE;
    		m_OkBtn.m_bTopImage = FALSE;
    		break;
     
    	case 1:  // Image à droite du text
    		m_OkBtn.m_bRightImage = TRUE;
    		m_OkBtn.m_bTopImage = FALSE;
    		break;
     
    	case 2: // image au dessus du text
    		m_OkBtn.m_bRightImage = FALSE;
    		m_OkBtn.m_bTopImage = TRUE;
    		break;
    	}
    4. Je n'oublie de redimensionner le bouton qui contient mon text + image
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	m_OkBtn.SizeToContent();  // redéfinit la taille du bouton (text+image)
    	m_OkBtn.Invalidate();  // invalide le bouton pour peinture.
    5. Je choisit si mon bouton doit adopter un style XP ou non.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	// Est-ce que le thème de Win XP est-t-il disponible sur cet OS?
    	BOOL bXPButtons = CMFCVisualManagerWindows::IsWinXPThemeAvailable();
     
    	CMFCButton::EnableWindowsTheming(bXPButtons);  // active ou désactive le style XP des boutons
    6. Et encore si ma boite de dialogue doit contenir une image d'arrière plan
    je remplace toutes les occurences de CDialog en CDialogEx et donc CMyDlg dérive de CDialogEx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class CMyDlg : public CDialogEx
    Et dans le OnInitDialog() j'ai la ligne de code suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // affiche l'image en arrière plan de ma dialogue qui dérive ici de CDialogEx
    	SetBackgroundImage(IDB_BACKGROUND_IMAGE, BACKGR_TOPLEFT);  // IDB_BACKGROUND_IMAGE est l'id du bitmap dans les ressource du projet
     
                // si TRUE, l'image de l'arrière plan couvre le bouton sinon FALSE 
    	m_OkBtn.m_bTransparent = TRUE;
    7. Je choisit le type de cursor qui doit apparaitre sur le bouton
    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
     
    	int iCursor = 0;  // définit un cursor sur le bouton
    	switch (iCursor)
    	{
    	case 0: // cursor standard
    		m_OkBtn.SetMouseCursor(NULL);   
    		break;
     
    	case 1:  // cursor en forme d'une main
    		m_OkBtn.SetMouseCursorHand();  
    		break;
     
    	case 2: // cursor personnalisé
    		m_OkBtn.SetMouseCursor(AfxGetApp()->LoadCursor(IDC_CURSOR)); 
    		break;
    	}
    8. Je choisit le texte qui doit apparaitre dans l'info bulle du bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // je définit un text pour l'info bulle sur le bouton
    	m_OkBtn.SetTooltip("Valider les données");
    Et voilà,

  2. #2
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Tu devrais peut etre préciser dans ta Q/R, si je ne me trompe pas que pour utiliser les classes que tu cites il faut avoir visual C++ 2008 et le Feature Pack.
    Sinon vraiment tres interressante comme Q/R.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

Discussions similaires

  1. [FAQ][VC++]Comment placer des images sur un menu contextuel
    Par Gabrielly dans le forum Contribuez
    Réponses: 0
    Dernier message: 14/04/2009, 18h48
  2. [FAQ][VC++]Comment placer une image de fond dans une dialogue
    Par Gabrielly dans le forum Contribuez
    Réponses: 0
    Dernier message: 09/04/2009, 17h21
  3. text info bulle sur un bouton
    Par adelsunwind dans le forum IHM
    Réponses: 5
    Dernier message: 05/02/2009, 23h53
  4. Réponses: 4
    Dernier message: 29/09/2006, 11h53
  5. Comment actualiser l'image de curseur
    Par Xavier dans le forum C++Builder
    Réponses: 1
    Dernier message: 16/01/2006, 15h59

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