FlashWindowEx (Clignotement de la fenetre)

FlashWindowEx (Clignotement de la fenetre) - C++ - Programmation

Marsh Posté le 27-06-2003 à 00:37:17    

Hello
 
Je crois que tout est dans le titre, comment je peux faire pour faire ca ? (VC++, MFC)
 
Merci


Message édité par gooopil le 27-06-2003 à 21:39:28
Reply

Marsh Posté le 27-06-2003 à 00:37:17   

Reply

Marsh Posté le 27-06-2003 à 01:09:05    

Tu veux parler des fonctions FlashWindow et FlashWindowEx ?


Message édité par gatorette le 27-06-2003 à 01:09:22

---------------
each day I don't die is cheating
Reply

Marsh Posté le 27-06-2003 à 01:12:24    

gatorette a écrit :

Tu veux parler des fonctions FlashWindow et FlashWindowEx ?


 
OUI :D
 
Merci

Reply

Marsh Posté le 27-06-2003 à 21:47:25    


Au départ je voulais utiliser la fonction FlashWindowEx du sdk windows. Après installation d'une mise à jour du sdk, pas de problème et vc++ reconnait bien la fonction. Puis j'ai eu des pb pour remplir la structure FLASHWINFO. Je faisais  

Code :
  1. FLASHINFO *f;
  2. f->hwnd = ....


Et ca me fait une erreur d'écriture mémmoire à l'exécution....
 
 
Comme j'y arrivais pas comme ca, je me suis lancé ds une petite recherche. Sur le site msdn, je suis tombé sur la même fonction FlashWindowEx mais appartenant cette fois à la classe CWnd...Mais ds vc++,

Code :
  1. (AfxGetMainWnd())->FlashWindowEx(FLASHW_TIMERNOFG,0,0);


me renvoie :  
 
E:\CM ar\chatter\Chatdoc.cpp(366) : error C2039: 'FlashWindowEx' : is not a member of 'CWnd'
 
e:\microsoft visual studio\vc98\mfc\include\afxwin.h(1899) : see declaration of 'CWnd'  
 
alors que http://msdn.microsoft.com/library/ [...] ndowex.asp
...
 

Reply

Marsh Posté le 27-06-2003 à 23:23:48    

et bien t'essaye ça ::FlashWindowEx();

Reply

Marsh Posté le 28-06-2003 à 00:42:59    

Gooopil a écrit :


Code :
  1. FLASHINFO *f;
  2. f->hwnd = ....


Et ca me fait une erreur d'écriture mémmoire à l'exécution....

Et l'allocation mémoire ?  :sarcastic:

Reply

Marsh Posté le 28-06-2003 à 01:03:12    

C pour faire beau c bien connu ;)

Reply

Marsh Posté le 28-06-2003 à 12:51:40    

ANTSite a écrit :

et bien t'essaye ça ::FlashWindowEx();


 
Comme ca j'accede à la fonction du SDK ?

Reply

Marsh Posté le 28-06-2003 à 12:52:35    

*Syl* a écrit :

Et l'allocation mémoire ?  :sarcastic:  


 
cad ? C'est beau de se moquer mais pourquoi ne pas me dire ce qu'il faut faire...Je fais un new ?

Reply

Marsh Posté le 28-06-2003 à 13:25:53    

Gooopil a écrit :


 
cad ? C'est beau de se moquer mais pourquoi ne pas me dire ce qu'il faut faire...Je fais un new ?


Code :
  1. FLASHINFO f;
  2. f.hwnd = ....

Reply

Marsh Posté le 28-06-2003 à 13:25:53   

Reply

Marsh Posté le 28-06-2003 à 13:44:41    

Gooopil a écrit :


 
cad ? C'est beau de se moquer mais pourquoi ne pas me dire ce qu'il faut faire...Je fais un new ?


 
Euh faut vraiment repondre (c pas une moquerie te rassure) mais bon tu fait Toto* pToto et puis un pToto->xxx ... ca te choque pas le moins du monde ?
 

Reply

Marsh Posté le 28-06-2003 à 13:48:14    

Au lieu de jouer les étonnés expliquez lui!
 
Gooopil , sais tu ce que c'est un pointeur?

Reply

Marsh Posté le 28-06-2003 à 14:54:20    

Bon, Gooopil, tu as 2 problèmes :
 
- D'abord tu n'alloues pas la mémoire pour ta structure FLASHINFO.
- Ensuite tu l'utilise en tant que membre de CWnd alors que c'est une fonction du SDK, donc faisant partie du namespace global.
 
Pour la 1ere erreur : tu dois allouer la mémoire pour ta structure FLASHINFO. Pas besoin de passer par une allocation dynamique pour ça, une simple allocation statique suffit :
 
 

Code :
  1. FLASHINFO fi;
  2. fi.cbSize = sizeof(struct FLASHINFO);
  3. fi.hwnd = xxxx; // HWND de la fenêtre que tu veux flasher
  4. fi.dwFlags = xxxx; // Flags
  5. fi.uCount = xxxx; // nombre de fois ou la fenêtre clignotera
  6. fi.dwTimeCount = xxxx; // ratio de flashage en millisecondes


 
Puis tu passes cette structure en paramètre à FlashWindowEx. Mais tu dois passer l'adresse de cette structure, et pas la structure elle même :
 

Code :
  1. ::FlashWinwowEx(&fi);


 
2ème problème : pourquoi ::FlashWindowEx() et pas FlashWindowEx() ? Car tu travailles en MFC, donc en conception objet. Ce qui signifie que chaque méthode que tu appelleras sera supposée appartenir à une classe, ce qui n'est pas le cas de FlashWindowEx(), qui est une fonction appartenant au namespace global (donc qui n'est une méthode d'aucune classe). D'où les 2 points. Si tu ne les mettais pas, ça voudrait dire que tu appelles FlashWindowEx en tant que méthode membre de l'objet que tu utilises.


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 28-06-2003 à 16:12:13    

VisualC++ a écrit :


 
Euh faut vraiment repondre (c pas une moquerie te rassure) mais bon tu fait Toto* pToto et puis un pToto->xxx ... ca te choque pas le moins du monde ?
 


 
Ben un peu....mais pas tant que ca en fait....
 
Pour répondre à Harko : Ensuite tu l'utilise en tant que membre de CWnd alors que c'est une fonction du SDK, donc faisant partie du namespace global,  
Il y a deux fonctions Flash....(), une du SDK, et une autre MFC dans CWnd. CF http://msdn.microsoft.com/library/ [...] ndowex.asp  
 
Mais bon de toutes facons, vu que j'aurais plus de problème avec l'allocation, j'aurais pas besoin d'utiliser celle des MFC, je me débrouillerais avec celle du SDK.
 
 

Reply

Marsh Posté le 28-06-2003 à 16:25:23    

Pendant que j'y suis, si j'avais voulu déclaré une variable :
 
machin * x.  
 
J'alloue comment la mémmoire ? Si c'est une classe je ferais  
machin *x = new machin();
 
Mais si c'est pas une classe ?
 
 
En gros si quelq'un pouvait m'expliquer très briévement allocation statique et dynamique ca serait géniale. J'ai fait un iut info y'a qq années et je me suis remis à la programmation, du coup certaines subtilités (notemment au niveau des pointeurs) ont disparu de ma petite cervelle....

Reply

Marsh Posté le 28-06-2003 à 19:23:14    

Gooopil a écrit :


J'alloue comment la mémmoire ? Si c'est une classe je ferais  
machin *x = new machin();


 
plutot :
 
machin *x = new machin;
 
et si c'est un int, par exemple :
 
int *x = new int;
 
En C++ un type de base ne se distingue pas d'un type utilisateur.

Reply

Sujets relatifs:

Leave a Replay

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