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.
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.
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é.
![]()
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 ?
si tu es en VC6 ,il faut mettre a jour le SDK ...
![]()
pourquoi ? c'est pas tres compliqué .
![]()
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
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);![]()
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 ?
re,
m_nAlpha c'est ton indice d'opacité .
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
oui apres tu fonctionnes comme dans ce post:
http://www.developpez.net/forums/vie...052238#2052238
![]()
Ok je comprends mieux, bon ben je vais essayer cela tout de suite![]()
Bon,
dans le OnInitDialog, je fais cela :
et dans OnCtrlColor:
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);
mais mon compilateur ne connait pas WS_EX_LAYERED. Si je retire la lligne ModifyStyleEx(0,WS_EX_LAYERED); j'ai une exception windows.
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); }
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.
re,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2#define WS_EX_LAYERED 0x00080000
![]()
Merci beaucoup, en rajoutant l'appel a InitLayeredWindows avant l'utilisation cela fonctionne parfaitement !
![]()
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager