[c++/winamp/winXP] Rajouter une ombre sous la fenetre de winamp

Rajouter une ombre sous la fenetre de winamp [c++/winamp/winXP] - C++ - Programmation

Marsh Posté le 14-04-2003 à 09:51:17    

Alors voila... je voudrais rajouter une ombre en permanence sous winamp, pour cela jme suis dis qu'il serait "logique" de modifier la classe de style de la fenetre, comme ceci :

Code :
  1. SetClassLong(hwndWinamp, GCL_STYLE, GetClassLong(hwndWinamp, GCL_STYLE) | 0x00020000); //CS_DROPSHADOW


 
CS_DROPSHADOW est spécifique à winXP et vaut 0x00020000
Onp uet avec cette prop créer des fenetre avec une ombre dans style des tooltips
 
mais voila... ca marche (forcément ! :D) pas !
 
heuuu... kkun aurait une idée ?
ou je me trompe completement de méthode ?


Message édité par Graffin le 14-04-2003 à 09:54:09

---------------
::Mind is a terrible thing to taste::
Reply

Marsh Posté le 14-04-2003 à 09:51:17   

Reply

Marsh Posté le 14-04-2003 à 12:49:14    

:bounce:


---------------
::Mind is a terrible thing to taste::
Reply

Marsh Posté le 14-04-2003 à 13:38:01    

d'apres les man faut aussi appeler la fct SystemParametersInfo() avec uiAction=SPI_SETDROPSHADOW
 
http://msdn.microsoft.com/library/ [...] rsinfo.asp
 
Edit : autant pour moi, ca a pas grand chose a voir. T'as testé la valeur de retour de SetClassLong() ? Sinon c possible que le winamp detecte si un style change, et le refuse (Spy++ power)


Message édité par Konar le 14-04-2003 à 14:01:16
Reply

Marsh Posté le 14-04-2003 à 15:40:30    

oui oui  
le Parametres est en effet activé sous XP :)
 
sinon j'ai trouvé ca, jvais voir ske ca donne :

Code :
  1. RedrawWindow(hwnd_winamp, NULL, NULL, DRW_FRAME | RDW_ERASE | RDW_INVALIDATE)


histoire qu'il se mette à jour
 
sinon : Spy++ POWA :hello:


---------------
::Mind is a terrible thing to taste::
Reply

Marsh Posté le 16-04-2003 à 09:52:28    

bon ben ca donne pas grand chose :/
 
j'ai même "redirigé" la 'WNDPROC' afin de récuperer le message WM_CREATE mais ca donne rien :/
 
qq a une idée ? plize ? :)


---------------
::Mind is a terrible thing to taste::
Reply

Marsh Posté le 16-04-2003 à 13:50:10    

UP utltime :/


---------------
::Mind is a terrible thing to taste::
Reply

Marsh Posté le 16-04-2003 à 23:25:52    

bon j'ai trouvé un truc, c pas tres propre, mais ca reste à rendre "plus mieux" :
 

Code :
  1. ...
  2. OrigProc=(WNDPROC)SetWindowLong(hwnd,GWL_WNDPROC,(long)MakeShadow); // hwnd c le handle de winamp -> FindWindow ("Winamp v1.x", NULL); par exemple
  3. SendMessage(hwnd, WM_CREATE, NULL, NULL);
  4. SetWindowLong(hwnd,GWL_WNDPROC,(long)OrigProc);
  5. ...
  6. // La proc (WNDPROC) qui est appellée en "complément" de OrigProc qui est celle de winamp
  7. LRESULT APIENTRY MakeShadow(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
  8.   if (uMsg == WM_CREATE) { // mouais :/
  9.     SetClassLong(hwnd, GCL_STYLE, (LONG)GetClassLong(hwnd, GCL_STYLE) | CS_DROPSHADOW);
  10.   }
  11.   return CallWindowProc(OrigProc, hwnd, uMsg, wParam, lParam);
  12. }


 
à faire à l'init [:spamafote]
 
ah oui pour que ca marche correct il faut au tt début :
#define _WIN32_WINNT 0x0501 // pour XP, 0x0500 c win2k
 
pour info, CS_DROPSHADOW = 0x00020000


Message édité par Graffin le 16-04-2003 à 23:28:30
Reply

Marsh Posté le 16-04-2003 à 23:33:58    

Citation :

Edit : autant pour moi, ca a pas grand chose a voir. T'as testé la valeur de retour de SetClassLong() ? Sinon c possible que le winamp detecte si un style change, et le refuse (Spy++ power)


 
Il me semble que SetClassLong ne fonctionne que sur des classes CS_GLOBALCLASS. Sinon c'est refusé.
Y'a que SetWindowLong qui marche.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 16-04-2003 à 23:40:07    

sauf SetWindowLong ne change pas les classe [:joce]
 
à moins que ? :??:
 
ceci dit ca marche, j'ai mon ombre à la con, sauf que je viens de m'appercevoir kya maintenant DEUX sous-menu winamp dans le bouton dla barre des taches :crazy:
 
strodlabal [:sumo]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed