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 :

problème dans l'intégration d'une boite de dialogue dans le dockablePane


Sujet :

MFC

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2008
    Messages : 354
    Points : 139
    Points
    139
    Par défaut problème dans l'intégration d'une boite de dialogue dans le dockablePane
    Bonjour,
    j'ai créé une application mfc. puis j'ai créé une boite de dialogue cordinates.
    J'ai suivi tous les étapes qui me permet d'intégrer une boite de dialogue( hérite de Cdialog) dans un dockablePane.

    Cette étape est bien marché mais mon pb maintenant est comment modifier la couleur grise de la boite de dialogue(je veux que la boite de dialogue aura le style de office 2007: c'est à dire le thème de l'office) et comment je peux gérer la taille.En faite le dockablePane est plus long que la boite de dialogue.
    Merci pour vos aides

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut ,
    pour gerer ça je me suis fait une petite classe dialog:
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    class CDialogExt : public CDialogEx
    {
        DECLARE_DYNCREATE(CDialogExt)
        
    public:
    
        CDialogExt(UINT nID=0,CWnd* pParent = NULL);    // standard constructor
        virtual ~CDialogExt();
    
        virtual void OnApplicationLook(){}
    
        DECLARE_MESSAGE_MAP()
        afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
        afx_msg BOOL OnEraseBkgnd(CDC* pDC);
    };
    IMPLEMENT_DYNCREATE(CDialogExt, CDialogEx)
     
    CDialogExt::CDialogExt(UINT nID,CWnd* pParent /*=NULL*/)
        : CDialogEx(nID, pParent)
    {
        
    }
    CDialogExt::~CDialogExt()
    {
        // Destruct
        
    }
     
    HBRUSH CDialogExt::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
        HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
        // TODO:  Modifier ici les attributs du DC
        if (m_brBkgr.GetSafeHandle() != NULL || m_hBkgrBitmap != NULL)
        {
            // TODO:  Modifier ici les attributs du DC    
            #define AFX_MAX_CLASS_NAME 255        
            #define    AFX_SLIDER_CLASS _T("msctls_trackbar32")
            if (nCtlColor == CTLCOLOR_STATIC)
            {
                TCHAR lpszClassName [AFX_MAX_CLASS_NAME + 1];
                ::GetClassName(pWnd->GetSafeHwnd(), lpszClassName, AFX_MAX_CLASS_NAME);            
                CString strClass = lpszClassName;
                if(strClass == AFX_SLIDER_CLASS)
                {    
                    pDC->SetBkMode(TRANSPARENT);
                    return(HBRUSH)m_brBkgr;
                }
            }
        }
        // TODO:  Retourner un autre pinceau si le pinceau par défaut n'est pas souhaité
        return hbr;
    }
     
    BOOL CDialogExt::OnEraseBkgnd(CDC* pDC)
    {
        // TODO: Add your message handler code here and/or call default
        //CBrush backBrush(m_crBackColor);//COLORREF 
       CBrush *pOldBrush=pDC->SelectObject(&m_brBkgr); 
       CRect rect; 
       pDC->GetClipBox(&rect); 
       pDC->PatBlt(rect.left,rect.top,rect.Width(),rect.Height(),PATCOPY); 
       pDC->SelectObject(pOldBrush);
     
        return TRUE;
    }
     
    BEGIN_MESSAGE_MAP(CDialogExt, CDialogEx)
        ON_WM_CTLCOLOR()
        ON_WM_ERASEBKGND()
    END_MESSAGE_MAP()
    pour changer la couleur il faut appeler la méthode
    SetBackgroundColor de la classe CDialogEx.
    pour récuperer la couleur du thème a l'occasion j'ai utilisé ceci :
    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
    void  CDialogExt::OnApplicationLook()
    {    
        CMainFrame *pMainFrame=static_cast<CMainFrame *>(GetParentFrame());    
        COLORREF clrDark;
        COLORREF clrBlack;
        COLORREF clrHighlight;
        COLORREF clrFace;
        COLORREF clrDarkShadow;
        COLORREF clrLight;
        CBrush* pbrFace = NULL;
        CBrush* pbrBlack = NULL;
     
        // recuperation des couleurs de l'interface pour changement de couleur sur le changement de look de l'application.
        CMFCVisualManager::GetInstance()->GetTabFrameColors(pMainFrame->GetTabs(), clrDark, clrBlack, clrHighlight, clrFace, clrDarkShadow, clrLight, pbrFace, pbrBlack);        
        SetBackgroundColor(    clrDarkShadow);    
    }
    si tu ne disposes pas d'onglet CMFCTabCtrl il faudra trouver autre chose dans la classe manager pour acquérir la couleur clrDarkShadow

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2008
    Messages : 354
    Points : 139
    Points
    139
    Par défaut
    Merci bien farscape.
    c'est bien marché

  4. #4
    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
    N'oubliez pas que la classe CPaneDialog existe et est l'équivalent de Dialog + DockablePane

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2008
    Messages : 354
    Points : 139
    Points
    139
    Par défaut
    Bonjour,
    je veux récupérer la couleur du thème mais j ai pas un CMFCTabCtrl.
    Or j ai un CMFCRibbonBar mais la seule méthode que j'ai trouvé est GetRibbonStatusBarTextColor.
    y a t il une autre méthode pour que je puisse récupérer la couleur du thème.
    Merci beaucoup pour vos aide

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2008
    Messages : 354
    Points : 139
    Points
    139
    Par défaut
    J'ai trouvé la solution.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    clrDarkShadow = CMFCVisualManager::GetInstance()->GetToolbarDisabledColor();

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2008
    Messages : 354
    Points : 139
    Points
    139
    Par défaut
    Bonjour,
    J'ai trouvé cette méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    clrDarkShadow = CMFCVisualManager::GetInstance()->GetToolbarDisabledColor()
    qui permet de récupérer la couleur du thème mais est ce qu'on peut utiliser cette méthode toujours ou bien seulement dans le cas ou on a un barre d'outil. Est ce qu'il y a une methode qui retourne la couleur du thème dans tous les cas (c'est à dire indépendamment des éléments utilisés dans le MainFrame).
    Merci pour vos aides

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 179
    Points : 12 308
    Points
    12 308

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2008
    Messages : 354
    Points : 139
    Points
    139
    Par défaut
    Bonjour,
    Merci pour votre réponse mais j'ai pas trouvé comment utiliser cette méthode.
    Je veux exactement modifier le background de ma boite de dialogue suivant la couleur du thème.
    voilà le bout de code que j'ai ajouté à la méthode OnApplicationLook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CPaintDC dc(this);
    CRect totalRect;
    GetClientRect(totalRect); 
    HTHEME hdg = OpenThemeData(this->m_hWnd , L"DialogBox"); 
    DrawThemeBackgroundEx(this->m_hWnd,dc.m_hDC,IDD_COORDINATES,ETS_NORMAL,totalRect,NULL);
    mais à chaque fois j'ai eu les erreurs suivantes
    1>Coordinates.obj : error LNK2001: symbole externe non résolu __imp__DrawThemeBackgroundEx@24
    1>Coordinates.obj : error LNK2001: symbole externe non résolu __imp__OpenThemeData@8

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2008
    Messages : 354
    Points : 139
    Points
    139
    Par défaut
    J'ai trouvé la solution pour cette erreur. Il suffit d'ajouter UxTheme.lib à l'éditeur des liens mais maintenant un debug assertion m'apparait.

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 179
    Points : 12 308
    Points
    12 308
    Par défaut
    Lignes de code environnent l'assert et la valeur des différentes variables au moment de l'assert, SVP.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Controler la saisie dans un tableau par une boite de dialogue
    Par narjissio dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 19/03/2015, 11h16
  2. Réponses: 6
    Dernier message: 18/06/2014, 13h29
  3. Réponses: 0
    Dernier message: 21/10/2010, 17h58
  4. Réponses: 5
    Dernier message: 27/03/2006, 10h29

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