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 :

Creer une fenetre avec un fond legerement transparent


Sujet :

MFC

  1. #1
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut Creer une fenetre avec un fond legerement transparent
    Bonjour j'aurais aime pouvoir donner a l'une de mes fenetre ce genre d'effet :



    Auriez vous une idee, j'ai cherche sur CodeProject et CodeGuru mais je trouve des fenetre avec une transparence totale. Or ce n'est pas ce que je veux.

  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,
    tu as vu ce post:
    http://www.developpez.net/forums/vie...052238#2052238
    il faut jouer avec l'avant dernier parametre de SetLayeredWindowAttributes
    pour regler l'opacité.

  3. #3
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut
    Oui je l'avais vu mais je croyais que cela ne fonctionnait que sous win2000 or je suis sou XP.

    Le probleme c'est que je ne trouve pas ca : WS_EX_LAYERED, de meme que SetLayeredWindowAttributes Ou est-ce defini ?

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    si tu es en VC6 ,il faut mettre a jour le SDK ...

  5. #5
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut
    Eh ben je suis mal alors...

  6. #6
    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
    pourquoi ? c'est pas tres compliqué .


  7. #7
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut
    Disons que je ne peux pas mettre le sdk a jour sur mon PC, question de compatibilite avec mes collegues lorsque l'on doit echanger des DLL en version debug

  8. #8
    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
    un truc comme ça devrait faire l'affaire:
    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
     
    typedef BOOL (WINAPI *lpfnUpdateLayeredWindow)(
    	HWND hWnd, HDC hdcDst, POINT *pptDst, SIZE *psize, HDC hdcSrc,
    	POINT *pptSrc, COLORREF crKey, BLENDFUNCTION *pblend, DWORD dwFlags
    );
     
    typedef BOOL (WINAPI *lpfnSetLayeredWindowAttributes)(
    	HWND hwnd, COLORREF crKey, BYTE xAlpha, DWORD dwFlags
    );
     
    static lpfnUpdateLayeredWindow g_lpfnUpdateLayeredWindow = NULL;
    static lpfnSetLayeredWindowAttributes g_lpfnSetLayeredWindowAttributes = NULL;
     
    BOOL InitLayeredWindows()
    {
    	if( g_lpfnUpdateLayeredWindow == NULL )
    	{
    		HMODULE hUser32 = GetModuleHandle(_T("USER32.DLL"));
     
    		g_lpfnUpdateLayeredWindow =
    			(lpfnUpdateLayeredWindow)GetProcAddress
    			(
    				hUser32,
    				_T("UpdateLayeredWindow")
    			);
     
    		g_lpfnSetLayeredWindowAttributes =
    			(lpfnSetLayeredWindowAttributes)GetProcAddress
    			(
    				hUser32,
    				_T("SetLayeredWindowAttributes")
    			);
     
    		return g_lpfnUpdateLayeredWindow != NULL ? TRUE:FALSE;
    	}
     
    	return TRUE;
    }
    // utilisation.
    g_lpfnSetLayeredWindowAttributes(GetSafeHwnd(),
    					RGB(0xFF, 0, 0xFF),
    					m_nAlpha,
    					ULW_ALPHA);

  9. #9
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut
    Ok je vais essayer cela.

    Par contre deux questions:

    - je ne trouve pas m_nAlpha, je definis cela comment, de meme pour ULW_ALPHA.
    - La fonction g_lpfnSetLayeredWindowAttributes, je l'appelle dans le OnInitDialog ?

  10. #10
    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
    re,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #define ULW_COLORKEY            0x00000001
    #define ULW_ALPHA               0x00000002
    #define ULW_OPAQUE              0x00000004
    m_nAlpha c'est ton indice d'opacité .
    oui apres tu fonctionnes comme dans ce post:
    http://www.developpez.net/forums/vie...052238#2052238

  11. #11
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut
    Ok je comprends mieux, bon ben je vais essayer cela tout de suite

  12. #12
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut
    Bon,

    dans le OnInitDialog, je fais cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      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); 	
    	g_lpfnSetLayeredWindowAttributes(GetSafeHwnd(),
                   RGB(0xFF, 0, 0xFF),
                   180,
                   ULW_ALPHA);
    et dans OnCtrlColor:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    HBRUSH CToDoManagerDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT 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);
    }
    mais mon compilateur ne connait pas WS_EX_LAYERED. Si je retire la lligne ModifyStyleEx(0,WS_EX_LAYERED); j'ai une exception windows.

    EDIT : j'ai remplace ModifyStyleEx(0,WS_EX_LAYERED); par un appel a InitLayeredWindows, ce coup ci cela passe, mais ma fenetre reste opaque, j'ai juste change la couleur du fond.

  13. #13
    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
    re,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #define WS_EX_LAYERED           0x00080000

  14. #14
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut
    Merci beaucoup, en rajoutant l'appel a InitLayeredWindows avant l'utilisation cela fonctionne parfaitement !


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

Discussions similaires

  1. Bouton transparent sur une fenetre avec fond
    Par titi42 dans le forum Débuter
    Réponses: 2
    Dernier message: 24/09/2009, 18h11
  2. Creer une fenetre avec plusieurs pages
    Par beni34 dans le forum Visual Studio
    Réponses: 1
    Dernier message: 30/07/2009, 18h56
  3. Réponses: 16
    Dernier message: 15/04/2008, 18h03
  4. Réponses: 7
    Dernier message: 18/07/2007, 15h52
  5. Obtenir une image avec un fond transparent
    Par LeXo dans le forum Imagerie
    Réponses: 9
    Dernier message: 28/03/2007, 11h38

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