none
Probleme avec setfacecolr RRS feed

  • Question

  • Bonjour,

    Je voudrais modifier la couleur de fond des boutons par l'instruction sur un controle CMFCBUtton

    ca ne marche pas du tout

    Je n'ai trouve aucun exemple sur le net

     

    CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows)); 

    EnableWindowsTheming(   BOOL bEnable = TRUE) est mis

     CMFCButton::m_bTransparent member variable is false

    m_button.m_bTransparent  =false

    m_button.setFaceColor(RGB, true)

    le prog est à sa plus simple expression

    mais ca ne marche pas quin peut m'aider

    mercredi 7 juillet 2010 09:27

Réponses

  • Je pense que le problème n'est pas vraiment dans le code mais dans le thème.

    J'ai ajouté les deux lignes supplémentaires et cela continue de marcher chez moi.

    Mais, j'utilise un Windows Server 2008 sans aucune fioriture graphique et donc "enabler" ou pas, le theming ne change en rien mon interface. Donc le bouton est rectangulaire ou rectangulaire.

    Je pense que votre thème courant override vos couleurs de fond.

    Essayez de sélectionner un thème basique à la NT4 pour voir si la couleur de fond change.

    Si c'est la cas, il faut utiliser le thème plutôt qu'ajouter des couleurs de fond arbitraires.


    Paul Bacelar, Ex - MVP VC++
    • Marqué comme réponse Alex Petrescu vendredi 16 juillet 2010 08:33
    mardi 13 juillet 2010 15:42
    Modérateur

Toutes les réponses

  • Bonjour,

     

    Avez-vous essayé l’exemple MSDN ?  

    http://msdn.microsoft.com/en-us/library/bb983153.aspx

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

    Astuces pour Visual Studio 2010

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF

    Café des usages

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

     

    mercredi 7 juillet 2010 09:55
  • Bonjour,

    Merci d'avoir répondu rapidement

    Je viens d'essayer l'exemple de msdn

    ci joint mon code

    le prog est juste une simple boite de dialogue avec 3 button

    - OK

    -Cancel

    et le button pour lequel je veux modifier le backgroundColor

    m_but est le CMFCButton.

    CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));

          m_but.EnableWindowsTheming(true);

     

          m_but.m_bTransparent = true;

          int tr = m_but.m_bTransparent;

         

     

          m_but.SetImage((HBITMAP) NULL);

          m_but.SetWindowText(_T("this is my Button"));

          m_but.SizeToContent();

          m_but.SetAutorepeatMode();

    //    m_but.EnableFullTextTooltip(true);

          m_but.EnableMenuFont();

     

          m_but.SetFaceColor(RGB(128,128,128),true);

    //    m_but.SetFaceColor(RGB(0,0,111),true);

     

          m_but.SetTextColor(RGB(0,0,255));

          m_but.SetTooltip(_T("this is a tooltip!"));

     

          UpdateData (false);

     

    EnableFullTextTooltip quand cette instruction est mise il n'y a pas de tooltip  ?????

    Le thème du button est correct.

    J'ai essaye differentes variantes de couleur

    - SetFaceColor ne fonctionne pas

    - SetTextColor fonctionne trés bien

    j'ai essaye de commenter et de decommenter toutes les instructions avec différentes combinaison => sans aucun résultat

    Cordialement

    Thierry

     

     

    mercredi 7 juillet 2010 12:24
  • Heu, j'ai pas du tout comprendre là.

    La doc MSDN

    http://msdn.microsoft.com/en-us/library/bb983413.aspx

     Elle ne contient qu'une remarque d'une phrase.

    CMFCButton::SetFaceColor ne marche que si CMFCButton::m_bTransparent vaut FALSE (pour être précis le texte dit que cela ne marche pas si CMFCButton::m_bTransparent vaut TRUE)

    m_but.m_bTransparent = true;
    C'est pas l'inverse ???
    Paul Bacelar, Ex - MVP VC++
    mercredi 7 juillet 2010 14:50
    Modérateur
  • Bonsoir

    j'ai essayé avec CMFCButton::m_bTransparent avec FALSE

    cela ne marche pas du tout

    J'ai essayé toutes les combinaisons

    et vous ne trouvez pas ca bizarre que

    //    m_but.EnableFullTextTooltip(true);

    doit être en commentaire !!!

    Programme de test avec une Boite de dialogue et un bouton pour lequel je veux changer le fond de couleur

     

    Cordialement

    Thierrry

    mercredi 7 juillet 2010 16:50
  • Une chose à la foix SVP.

    En untilisant que SetFaceColor et m_bTransparent, est-ce que cela fonction ?

    L'exemple MSDN fonctionne-t-il ?


    Paul Bacelar, Ex - MVP VC++
    mercredi 7 juillet 2010 18:25
    Modérateur
  • Bonjour

     

    En n'utilisant que SetFaceColor et m_bTransparent = FALSE cela ne fonctionne pas.

    L'exemple de MSDN ne fonctionne pas http://msdn.microsoft.com/en-us/library/bb983153.aspx

    l'exemple "NewControls" n'utilise pas de SetFaceColor

    dans Google qui est mon ami je n'ai pas trouvé un exemple fonctionnel qui utilise "SetFaceColor"

    Voilà le problème

    Merci Thierry

    mercredi 7 juillet 2010 19:35
  • Je dois peut-être mal mit prendre mais chez moi ça fonctionne.

     

    -J'ai fais une simple application MFC MDI avec ProjetStyle Visual Studio.

    -J'ai ajouté un bouton MFC dans la CAboutDlg de nom m_test

    -J'ai ajouté cette ligne dans le constructeur de la boîte de Dialogue

    m_test.SetFaceColor(RGB(255,0,0),

     

    true);

    Quand je lance l'application et que j'affiche l'About, le nouveau bouton a un fond rouge.

    CQFD.


    Paul Bacelar, Ex - MVP VC++
    vendredi 9 juillet 2010 21:59
    Modérateur
  •  

    si je mets

     

    bonjour,

    si je rajoute ces instructions dans le constructeur

    CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));

    m_test.EnableWindowsTheming(

     

    true);

    EnableWindowsTheming  affects all buttons in your application that are derived from the CMFCButton class

    en francais affecte tous les boutons de votre application qui sont derives de la classe CMFCButton

    dans ce cas là SetFaceColor ne fonctionne pas ??

    SetFaceColor ne marche pas quand le Theme de l'application est à true ??

    sinon quand EnableWindowsTheming(false); alors le bouton est rectangulaire et est depareillé du bouton OK

    Pour moi cela ne fonctionne pas..........

    a l'encontrontre SetTextColor fonctione dans tous les cas...

    si je mets comme instruction

    bool

     

     

    bTr = m_test.m_bTransparent ;

    bTR = false quelque soit l'instruction EnableWindowsTheming à true ou false

    pour moi c'est bancal

    sinon j'ai toujours dis que mon application etait de ce qu'il ya de plus simple

    le prog est juste une simple boite de dialogue avec 3 buttons

    - OK

    -Cancel

    et le button pour lequel je veux modifier le backgroundColor et non pas de MDI

    Cordialement

    Thierry

    samedi 10 juillet 2010 20:51
  • Je pense que le problème n'est pas vraiment dans le code mais dans le thème.

    J'ai ajouté les deux lignes supplémentaires et cela continue de marcher chez moi.

    Mais, j'utilise un Windows Server 2008 sans aucune fioriture graphique et donc "enabler" ou pas, le theming ne change en rien mon interface. Donc le bouton est rectangulaire ou rectangulaire.

    Je pense que votre thème courant override vos couleurs de fond.

    Essayez de sélectionner un thème basique à la NT4 pour voir si la couleur de fond change.

    Si c'est la cas, il faut utiliser le thème plutôt qu'ajouter des couleurs de fond arbitraires.


    Paul Bacelar, Ex - MVP VC++
    • Marqué comme réponse Alex Petrescu vendredi 16 juillet 2010 08:33
    mardi 13 juillet 2010 15:42
    Modérateur
  • Bonjour,

     

    M. Bacelar, merci pour cette suggestion !

     

    Thierry, je vous prie de confirmer si le conseil de Paul Bacelar est la solution correcte pour votre problème.

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

    Astuces pour Visual Studio 2010

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF

    Café des usages

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

     

    mercredi 14 juillet 2010 12:28