|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
Sujet : Controles transparents ? [ Archives / Graphique ] (Cako19)
Informations & options pour cette discussion
vendredi 22 avril 2005 à 09:27:20 |
Controles transparents ?

Cako19
|
Bonjour, Qqun saurait-il s'il est possible de rendre un controle transparent et si oui comment ? Merci d'avance pour votre aide, Cako19
|
|
|
vendredi 22 avril 2005 à 12:38:41 |
Re : Controles transparents ?

DeAtHCrAsH
|
Yep, Il est tout a fait possible de le faire a condition que tu sois sous Windows 2000 minimum. Voila un bout de code qui rend une fenetre transparente. Tu n'as cas changer le handle passé en parametre a la fonction MySetLayeredWindowAttributes pour que la transparence s'applique a ton control.
#include <windows.h>
#define WS_EX_LAYERED 0x00080000
#define LWA_COLORKEY 0x00000001
#define LWA_ALPHA 0x00000002
BYTE bAlpha=255,Anim=1;
typedef BOOL (WINAPI *SLWA_FUNC)(HWND hwnd,COLORREF crKey,BYTE bAlpha,DWORD dwFlags);
BOOL MakeAlpha(HWND hwnd,BYTE alpha)
{
// Récupération ddu handle de User32.dll, puis de l'adresse de
// la fonction SetLayeredWindowAttributes dans cette Dll.
SLWA_FUNC MySetLayeredWindowAttributes;
HMODULE hUser32 = GetModuleHandle("USER32.DLL");
if (!hUser32) return FALSE;
MySetLayeredWindowAttributes = (SLWA_FUNC)GetProcAddress(hUser32,"SetLayeredWindowAttributes");
if (MySetLayeredWindowAttributes)
{
// Application du paramètre alpha sur la fenêtre
MySetLayeredWindowAttributes(hwnd,NULL,alpha,LWA_ALPHA);
// il est également possible de combiner le mode "Alpha" avec
// le mode transparent LWA_COLORKEY. Dans ce cas, toutes les parties
// de la fenêtre qui seront de la couleur 'crKey' seront transparentes.
// Il sera donc possible de cliquer à travers la fenêtre
//
// Exemples :
// MySetLayeredWindowAttributes(hwnd,0x00000000,alpha,LWA_ALPHA | LWA_COLORKEY);
// => Toutes les parties noires de la fenêtre seront transparentes
// Le reste aura un paramètre alpha
// MySetLayeredWindowAttributes(hwnd,0x00FFFFFF,NULL,LWA_COLORKEY);
// => toutes les parties blanches seront transparentes
// Le reste sera normal
return TRUE;
} else {
// Si pas Windows 2000 ou Windows XP, la fonction SetLayeredWindowAttributes
// n'existe pas, il est donc impossible d'appliquer le paramètre.
MessageBox(hwnd,"Impossible de passer la fenêtre en WS_EX_LAYERED","Erreur",MB_ICONERROR);
return FALSE;
}
}
LRESULT CALLBACK MainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
long result = 0;
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_CREATE:
if (MakeAlpha(hwnd,bAlpha))
SetTimer(hwnd,11111,10,NULL);
else
PostQuitMessage(0);
break;
case WM_CLOSE:
PostQuitMessage(0);
break;
case WM_TIMER:
MakeAlpha(hwnd,bAlpha);
if (Anim==0)
{
bAlpha+=1;
if (bAlpha>=255) Anim=1;
} else {
bAlpha-=1;
if (bAlpha<=0) Anim=0;
}
break;
case WM_PAINT:
PAINTSTRUCT ps;
HDC hdc;
RECT rect;
BeginPaint(hwnd,&ps);
hdc = GetDC(hwnd);
GetClientRect(hwnd,&rect);
DrawText(hdc,"C'est t'y pas beau ça ?",23,&rect,DT_CENTER);
ReleaseDC(hwnd,hdc);
EndPaint(hwnd,&ps);
break;
default:
result = DefWindowProc(hwnd, message, wParam, lParam);
break;
}
return result;
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
WNDCLASSEX MyWC={ sizeof(WNDCLASSEX),CS_HREDRAW|CS_VREDRAW,MainWndProc,0L,0L,
hInstance, LoadIcon(NULL,IDI_APPLICATION),
LoadCursor(NULL, IDC_ARROW),
(HBRUSH) (COLOR_BTNFACE+1),
NULL,"MyWndClassEx",LoadIcon(NULL,IDI_APPLICATION)};
if(!RegisterClassEx(&MyWC)) return 0;
HWND hWndMain = CreateWindowEx(WS_EX_LAYERED,"MyWndClassEx","Fenêtre transparente", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,400,300, NULL,NULL,hInstance,NULL);
ShowWindow(hWndMain,nCmdShow);
UpdateWindow(hWndMain);
MSG msg;
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
} Shell
|
|
|
vendredi 22 avril 2005 à 14:01:27 |
Re : Controles transparents ?

Cako19
|
Merci beaucoup !!
En fait, si j'ai bien compris c'est la fonction MakeAlpha qui doit être appelée avec le handle de mon contrôle pour le rendre transparent. C'est ça ? Donc si je veux faire une dll pour l'utiliser dans un autre environnement, je dois juste exporter cette fonction ?
|
|
|
vendredi 22 avril 2005 à 14:44:35 |
Re : Controles transparents ?

Cako19
|
En exportant MakeAlpha, mon controle n'est pas transparent :(
|
|
|
lundi 25 avril 2005 à 15:09:02 |
Re : Controles transparents ?

Cako19
|
J'arrive à rendre transparente ma fenêtre en exportant MainWinProc mais je n'arrive pas à récupérer le handle de mes contrôles. Qqun saurait-il comment il faut faire svp ?
Merci d'avance,
Cako19
|
|
|
jeudi 28 avril 2005 à 11:27:11 |
Re : Controles transparents ?

Cako19
|
Réponse acceptée !
Bonjour,
Oui c'est encore moi !
Pensez vous que le code ci-dessus marche réellement avec des controles ? En effet, j'ai vu dans msdn que la fonction essentielle utilisée dans le code : SetLayeredWindowAttributes ne fonctionnait pas avec les enfants d'une fenêtre et donc sûrement pas avec les contrôles non ? Je cite :"Note that WS_EX_LAYERED cannot be used for child windows." Qu'en pensez vous ?
Merci pour votre aide,
Cako19
|
|
|
vendredi 28 juillet 2006 à 10:49:45 |
Re : Controles transparents ?

_Jonathan
|
salut a tous,
je cherche à rendre une image (voire n'importe quel controle : bouton, static,...) non transparente qui serait dans une fenetre transparente. Est-ce possible ? Comment faire ?
|
|
|
Cette discussion est classé dans : controles, transparents
Répondre à ce message
Sujets en rapport avec ce message
recupérer les controles d'une Boite de Dialogue [ par loC ]
salut,ju'aimerai pouvoir balayer tous les controles d'une boite de dialogue.ie : obtenir une liste de CWnd * contenant tous les controles.
coordonnées des controles ... [ par hotrod1 ]
bonjour à tous ! J'utilise une fenètre de dialogue visual c++, et je voudrais savoir s'il est possible de déplacer des objet de la fenetre pendant l'u
coordonnées des controles... [ par hotrod1 ]
bonjour à tous ! J'utilise une fenètre de dialogue visual c++, et je voudrais savoir s'il est possible de déplacer des objet de la fenetre pendant l'u
coordonnées des controles ... [ par hotrod1 ]
bonjour à tous ! J'utilise une fenètre de dialogue visual c++, et je voudrais savoir s'il est possible de déplacer des objet de la fenetre pendant l'u
coordonnées de controles .?... [ par hotrod1 ]
bonjour à tous ! J'utilise une fenètre de dialogue visual c++, et je voudrais savoir s'il est possible de déplacer des objet de la fenetre pendant l'u
CPropertyPage [ par sandrineStagiaire ]
Salut,J'ai deux controles actives X(de meme nature) qui sont sur deux onglets différents.A la premiere visualisation tout va bien. Les deux sont bons
Textes transparents [ par garslouche ]
Bonjour,je voudrais savoir comment on peut faire des CStatic (textes) qui aient un fond transparent.J'ai essayé d'utiliser CtlColor en faisant pDC->Se
Creer des controles sans MFC??? [ par Arkko ]
Salut, est ce quelquun pourrais me dire comment creer (ou placer) des controles(ex:textbox) sur une form SANS LES MFC ...merci@+ Arkko
copie d'un controle [ par didrocks ]
Salut!J'ai un peu recherché dans le forum et il ne semble pas avoir de réponse précise à ce type de question. Donc, je la pose:J'ai créé une boite de
Ajouter des controles sur chaque ligne d'une listbox? [ par titpeste ]
Bonjour,je developpe une application à l'aide de la MFC.J'ai une listbox et j'aurai besoin de permettre à l'utilisateur d'appliquer un traitement pour
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|