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)

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


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,998 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.