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 :

rendre CFormView transparente [FAQ]


Sujet :

MFC

  1. #1
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 37
    Par défaut rendre CFormView transparente
    Salut,

    j'ai vu qu'on pouvait rendre une CDialog transparente (lien). Qu'en est-il des CFormView, est ce possible de rendre le fond d'une CFormView transparent?

    merci


    [edit] Ah tiens tant que j'y suis : est-il possible de définir 2 ou plusieurs couleurs à rendre transparente dans une CDialog? et dans une CFormView?

  2. #2
    Membre averti
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Par défaut
    C'est pas terrible de travailler avec les formviews, on peut faire tellement plus de choses avec une boite de dialogue
    je pense que ça peut quand même marcher avec une cformview mais OnInitDialog devient OnInitialUpdate et la fonction OnCtlColor devrait fonctionner pour une CFormView ; cf la librairie MSDN: http://msdn.microsoft.com/en-us/libr...hc(VS.80).aspx

    Sinon tu repasses en CDialog, tu vas dans les propriétés de la CDialog, tu enlèves la TitleBar, la bordure et tu mets en positions X : 0 et Y : 1 et tu auras qqch de similaire à une formview

    Je comprends pas ta dernière Q

  3. #3
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 37
    Par défaut
    J'essaye de passer mon code en boite de dialogue pour le moment. merci pour les infos.

    Pour ma derniere quesiton, voila le code donné dans la FAQ :
    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
     
    BOOL CAboutDlg::OnInitDialog() 
    {
        CDialog::OnInitDialog();
     
    // TODO: Add extra initialization here
     
    m_pBrush= new CBrush;
    m_pBrush->CreateSolidBrush(RGB(187,221,255));
     
    ModifyStyleEx(0,WS_EX_LAYERED);
    SetLayeredWindowAttributes(m_hWnd,RGB(187,221,255),180,LWA_ALPHA);
     
    return TRUE;  // return TRUE unless you set the focus to a control
                  // EXCEPTION: OCX Property Pages should return FALSE
    }
    HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    //HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    // TODO: Change any attributes of the DC here
    // TODO: Return a different brush if the default is not desired
    return static_cast<HBRUSH>(*m_pBrush);
    //return hbr;
    }
    la fonction "SetLayeredWindowAttributes" ne va jouer sur l'opacité que d'une seule couleur : ici RGB(187,221,255). Mais si par exemple, je veux rendre également la couleur RGB(0,0,255) totalement transparente, je fais comment puisque je ne peux définir qu'une seule couleur?

  4. #4
    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
    Par défaut
    Citation Envoyé par clem86 Voir le message
    C'est pas terrible de travailler avec les formviews, on peut faire tellement plus de choses avec une boite de dialogue
    je pense que ça peut quand même marcher avec une cformview mais OnInitDialog devient OnInitialUpdate et la fonction OnCtlColor devrait fonctionner pour une CFormView ; cf la librairie MSDN: http://msdn.microsoft.com/en-us/library/0wwk06hc(VS.80).aspx

    Sinon tu repasses en CDialog, tu vas dans les propriétés de la CDialog, tu enlèves la TitleBar, la bordure et tu mets en positions X : 0 et Y : 1 et tu auras qqch de similaire à une formview

    Je comprends pas ta dernière Q
    faux, une boîte de dialogue a son utilité et la formview la sienne chacun dans son contexte.

  5. #5
    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
    Par défaut
    le problème de la transparence pour une formview c'est qu'il y a un child...
    essaye d'implémenter la transparence sur la child pour voir.

  6. #6
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 526
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 526
    Par défaut
    Grorel à part jouer sur la "translucidité" je ne vois pas..
    Citation Envoyé par clem86 Voir le message
    C'est pas terrible de travailler avec les formviews, on peut faire tellement plus de choses avec une boite de dialogue
    Q
    eh oui mais comment je fais dans un projet SDI voire MDI ?
    J'ai un projet avec une CScrollView 2 splitters une CFormView et une CView

  7. #7
    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
    Par défaut
    bien , j'ai fait un essai rapide dans un projet SDI , pas de problème
    dans la CMainFrame dans OnCreate:
    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
     
    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
        if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
            return -1;
     
        if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
            | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
            !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
        {
            TRACE0("Failed to create toolbar\n");
            return -1;      // fail to create
        }
     
        if (!m_wndStatusBar.Create(this) ||
            !m_wndStatusBar.SetIndicators(indicators,
              sizeof(indicators)/sizeof(UINT)))
        {
            TRACE0("Failed to create status bar\n");
            return -1;      // fail to create
        }
        m_wndStatusBar.SetBitmap(IDB_BITMAP1);
        m_wndStatusBar.SetPaneStyle(1,SBT_OWNERDRAW);
     
        // TODO: Delete these three lines if you don't want the toolbar to
        //  be dockable
        m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
        EnableDocking(CBRS_ALIGN_ANY);
        DockControlBar(&m_wndToolBar);
     
    // mise en place de la transparence....
        m_pBrush= new CBrush;
        m_pBrush->CreateSolidBrush(RGB(187,221,255));
     
        ModifyStyleEx(0,WS_EX_LAYERED);
        SetLayeredWindowAttributes(RGB(187,221,255),180,LWA_ALPHA);
     
        return 0;
    }
    HBRUSH CMainFrame::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
        HBRUSH hbr = CFrameWnd::OnCtlColor(pDC, pWnd, nCtlColor);
     
        // TODO:  Change any attributes of the DC here
        return static_cast<HBRUSH>(*m_pBrush);
     
        // TODO:  Return a different brush if the default is not desired
        //return hbr;
    }
    la preuve en image :

    dans le cas d'un projet MDI on doit pouvoir faire la même chose...

  8. #8
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par farscape Voir le message
    faux, une boîte de dialogue a son utilité et la formview la sienne chacun dans son contexte.
    Assez d'accord. D'ailleurs, clem86, est-ce que ton avis ne viendrais pas des soucis que tu as eu récemment?

Discussions similaires

  1. [alpha-blending] Rendre transparente une couleur
    Par Ekinoks dans le forum OpenGL
    Réponses: 10
    Dernier message: 20/12/2005, 13h51
  2. Comment rendre une form transparente à certains endroits ?
    Par ludo5532 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 21/08/2005, 15h28
  3. rendre une image transparente
    Par nabil dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 12/06/2005, 13h53
  4. rendre une image transparente
    Par matt92700 dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 02/06/2005, 08h42

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