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 �clair�
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    D�tails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    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
    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 �clair�
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    D�tails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    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
    Par d�faut
    si tu es en VC6 ,il faut mettre a jour le SDK ...

  5. #5
    Membre �clair�
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    D�tails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    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
    Par d�faut
    pourquoi ? c'est pas tres compliqu� .


  7. #7
    Membre �clair�
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    D�tails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    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
    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 �clair�
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    D�tails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    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
    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 �clair�
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    D�tails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Par d�faut
    Ok je comprends mieux, bon ben je vais essayer cela tout de suite

  12. #12
    Membre �clair�
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    D�tails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    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
    Par d�faut
    re,
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    #define WS_EX_LAYERED           0x00080000

  14. #14
    Membre �clair�
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    D�tails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    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