erreur avec tray message...

erreur avec tray message... - C++ - Programmation

Marsh Posté le 07-04-2003 à 09:48:50    

J'ai mis au point une petite application afin de tester le fonctionnement d'un trayicone dans la barre des taches.
J'ai implanté une petite fonction qui réagit aux clicks sur les boutons de la souris. Le bouton gauche marche correctement, mais le bouton droit, sensé faire appel à un menu contextuel, me renvoie une erreur d'application, me disant que la zone mémoire à laquelle j'essaie d'acceder ne peut pas être "read"
(erreur exacte : "L'instruction '0x5f42e450' emploie l'adresse mémoire '0x00000004'. La mémoire ne peut pas être 'read'.
 

Reply

Marsh Posté le 07-04-2003 à 09:48:50   

Reply

Marsh Posté le 07-04-2003 à 09:51:47    

Regarde ce topic, j'avais indiqué la manip correcte pour gérer les traymessages et tout ce qui va avec (dont les popups gérés par clic droit)
 
http://forum.hardware.fr/forum2.php3?post=18303&cat=10
 
 
 
edit: et j'en profite pour rappeler que la fonction http://forum.hardware.fr/icones/recherche.gif du forum n'est pas la pour faire joli...


Message édité par Harkonnen le 07-04-2003 à 09:53:42

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

Marsh Posté le 07-04-2003 à 09:54:15    

mon cher harkonnen, justement, je me suis déja inspiré de ta méthode, que j'ai suivie à la lettre... C'est pour ca que je me suis permis de recommencer, afin de te faire réagir  :D

Reply

Marsh Posté le 07-04-2003 à 10:05:03    

mais ca veut pas dire qu'il faut pas que tu m'aides, mon appli plante quand meme !!!

Reply

Marsh Posté le 07-04-2003 à 10:07:39    

ben postes ton source alors, parce que si je sais pas ce que tu as fait, je vois pas comment je pourrais voir ou est l'erreur [:sinclaire]


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

Marsh Posté le 07-04-2003 à 10:11:58    

Donc...
Apparement l'erreur vient au moment de l'appel du menu (dans le fichier wincore.cpp, l'instruction ASSERT(m_Menu != NULL).
Je te donne donc la fonction qui appelle ce menu :

Code :
  1. LRESULT CPremiereAppliDlg::OnTrayMessage(WPARAM wParam, LPARAM lParam)
  2. {
  3.   if (lParam == WM_RBUTTONDOWN)
  4.   { // bouton droit enfoncé
  5. CMenu menu;
  6. CPoint pt;
  7. menu.LoadMenu(IDR_MENU1);
  8. CMenu *m = menu.GetSubMenu(0);
  9.     ::SetForegroundWindow(m_hWnd); //nécessaire, cause bug windows
  10.     m->TrackPopupMenu(TPM_LEFTALIGN,pt.x,pt.y,this);
  11.     :: PostMessage(m_hWnd, WM_NULL, 0, 0);
  12.   }
  13.   else if (lParam == WM_LBUTTONDBLCLK)
  14.   {
  15. // double clic bouton gauche
  16. if (cpt_state == 0)
  17. {
  18.  ShowWindow(SW_SHOWNORMAL);
  19.  SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE );
  20.  SetActiveWindow();
  21.  cpt_state = 1;
  22. }
  23. else if (cpt_state == 1)
  24. {
  25.  ShowWindow(SW_HIDE);
  26.  cpt_state = 0;
  27. }
  28.   }
  29.   return 0;
  30. }


 
Le bouton gauche ne fonctionne plus, mais ca n'a rien à voir. Le compteur sert juste pour l'agrandissement de la fenetre, ou sa minimisation....

Reply

Marsh Posté le 07-04-2003 à 10:19:08    

as tu vérifié dans le wincore.cpp, le nom de la méthode dans laquelle est placée l'assert() ?
apparemment, ta variable membre qui contient l'instance du menu est NULL. ce qui peut signifier que le menu n'existe pas. est-ce le bon ID de ressource que tu utilises ? (IDR_MENU1 était mon ID, ça ne veut pas dire que tu utilises forcément le même).
 
j'ai pas trop le temps aujourd'hui. si tu veux, envoie moi ton projet complet par mail (cf profil) et je le regarderais rapidement ce soir. je te répondrais sur ce topic.  
 
mais avant, vérifie bien si ta variable m_Menu n'est pas NULL, et si c'est le cas, essaie de rechercher les causes.


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

Marsh Posté le 07-04-2003 à 11:04:09    

Vi t'a le droit de faire un  
 

Code :
  1. if (!menu.LoadMenu(ID..))
  2. return 0;
  3. CMenu* pSubMenu = menu.GetSubMenu(0);
  4. if (!pSubMenu)
  5. return 0;


 
Ca evitera d'aller crashe sur le TrackPopup apres quand pSub est null.

Reply

Marsh Posté le 07-04-2003 à 12:02:16    

je viens de vérifier avec un mec de mon entreprise.
En effet, l'id de mon menu n'est pas bonne.
Pourtant, j'ai dessiné moi même un menu qui porte l'id IDR_MENU1.
Alors, n'ayant que très peu d'expérience dans le mfc, je ne sais pas si ca fonctionne (d'appeler un menu dessiné), mais c'est ce que j'ai fait. Le pb est donc peut etre la.
En tout cas, il ne trouve pas ce menu.  
Le mec m'a dit aussi que le probleme etait peut etre ailleurs.
Lors du lancement de l'appli (dans onInitDlg), c'est la que je créée le notifyicon, il apparait donc dès le départ. Peut etre faudrait-il qu'il n'apparaisse que lorque qu'on clique sur minimiser. A ce moment la, comment on fait ?????? et comment on fait pour que, quand la fenetre est minimiser, elle n'apparaisse pas en barre des taches, mais qu'il y ait juste l'icone en bas à droite....  :sweat:  
Aidez moi s'il vous plaaaaiiiitt   [:flclsd]

Reply

Marsh Posté le 07-04-2003 à 12:06:24    

backdafuckup a écrit :

Lors du lancement de l'appli (dans onInitDlg), c'est la que je créée le notifyicon, il apparait donc dès le départ. Peut etre faudrait-il qu'il n'apparaisse que lorque qu'on clique sur minimiser. A ce moment la, comment on fait ??????  


Tu créé une fonction qui interceptera WM_MINIMIZE avec le ClassWizard, et tu places le code dedans.
 

backdafuckup a écrit :


et comment on fait pour que, quand la fenetre est minimiser, elle n'apparaisse pas en barre des taches, mais qu'il y ait juste l'icone en bas à droite....  :sweat:  
Aidez moi s'il vous plaaaaiiiitt   [:flclsd]


ShowWindow(SW_HIDE)


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

Marsh Posté le 07-04-2003 à 12:06:24   

Reply

Marsh Posté le 07-04-2003 à 14:24:14    

Est ce que WM_SIZE c'est pareil que WM_MINIMIZE ?
Parce que WM_MINIMIZE, je l'ai pas dans le class wizard (c bien dans MaClasseDlg qu'il faut regarder je suppose...). J'ai WM_SIZE, WM_SHOWWINDOW et des trucs du style, mais pas minimize...
Et j'avais fait ShowWindow(SW_HIDE) dans InitDlg, mais ca marche pas, la fenetre s'affiche quand meme, c'est normal ?
En tout cas, merci harkonnen pour toutes ces précisions. [:flclsd]

Reply

Marsh Posté le 07-04-2003 à 14:28:21    

Et, derniere question à tous ceux qui liront ce post. Existe-t-il une fonction qui permet de connaitre l'état de la fenetre (si elle est dans l'état SW_HIDE ou dans l'état SW_SHOWNORMAL).
Merci  :hello:

Reply

Marsh Posté le 07-04-2003 à 14:43:55    

bah... harkonnen il vient plus sur mon post....  :cry:

Reply

Marsh Posté le 07-04-2003 à 14:47:09    

si si, j'ai lu ! je me suis loupé, tu dois effectivement utiliser WM_SIZE. mais dans ce cas, il faut faire gaffe à ce que ta form principale ne soit pas redimensionnable, sinon l'application sera mise en tray chaque fois que tu redimensionneras.
 
pour le ShowWindow(), ça doit fonctionner, vu que c'est ce que j'emploie pour masquer la fenêtre. j'ai pas le temps cet aprem, poste ou, mieux, envoie moi ton projet et je regarderais ça ce soir rapidement


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

Marsh Posté le 07-04-2003 à 15:02:26    

je t'ai mailé mon projet sur l'adresse inscrite dans ton profil hfr... Franchement... c cool de ta part..

Reply

Sujets relatifs:

Leave a Replay

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