MessageBox qui n'apparait pas

Résolu
Ilmen_ Messages postés 55 Date d'inscription dimanche 13 mai 2007 Statut Membre Dernière intervention 10 août 2007 - 24 mai 2007 à 23:38
Ilmen_ Messages postés 55 Date d'inscription dimanche 13 mai 2007 Statut Membre Dernière intervention 10 août 2007 - 25 mai 2007 à 18:44
Voila, j'ai un problème avec mon programme WinAPI (AnalyseurADN.cpp) : mes MessageBox ne fonctionnent pas, elles n'apparaissent tout simplement pas.

Le code de mon programme est disponible ici : AnalyseurADN.cpp (durant 24h).


Par exemple, le MessageBox de la ligne 151, un test, ne s'affiche pas lorsque je clique sur le bouton ID_B_ANALYSE.


Quelqu'un a une idée de l'origine de ce problème ?

13 réponses

Ilmen_ Messages postés 55 Date d'inscription dimanche 13 mai 2007 Statut Membre Dernière intervention 10 août 2007
25 mai 2007 à 18:39
<!-- Problème résolu -->
C'est réglé.

Alors, la solution pour ceux qui on un problème de ce type, c'est de créer deux sections bien distinctes, une pour les messages, une pour les notifications, sur le modèle suivant :

<table align="center" bgcolor="#C9F4FF" width="500px" border="1">
----,

/*** Traitement des messages ***/

VOID MessageControle(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{
UINT iId=LOWORD(wParam);

HWND hCtl=(HWND)lParam;

switch(iId)

{

case ID_B_ANALYSE:

MessageBox(NULL, \"Test\", \"Test\", MB_OK);

break;

}

}

/*** Traitement des notifications ***/

VOID NotificationControle(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

UINT iCode=HIWORD(wParam);

HWND hCtl=(HWND)lParam;

switch(iCode)

{

case BN_CLICKED:

MessageControle(hWnd, message, wParam, lParam);

break;

}

}
</td>



Voili voilou.
</td>
</tr>
</table>
3
thomwebster Messages postés 63 Date d'inscription mercredi 7 février 2007 Statut Membre Dernière intervention 14 juin 2007
25 mai 2007 à 07:36
Bonjour, j'ai trouvé le problème, essaye ça :
    MessageBox(0, "Test", "Test", MB_OK); // Test de MessageBox : non concluant...
 Et tien moi au courant ;)
bon courage et a bientot.
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
25 mai 2007 à 10:04
je rejoins le commentaire de thomwebster, il y a certainement un problème à la spécification du handle en premier paramètre. pour que ça s'affiche à coup sur, il faut généralement mettre NULL (ou 0)

que se passe t il dans ce cas ?

Loki
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 4
25 mai 2007 à 10:52
Salut,

Ben moi je dirais que c'est plutot parceque la fonction NotificationControle n'est jamais appelée dans le code.

Faudrait rajouter un case WM_COMMAND dans la WndProc et appeler NotificationControle ici.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
2fear Messages postés 14 Date d'inscription jeudi 9 juin 2005 Statut Membre Dernière intervention 25 mai 2007 1
25 mai 2007 à 11:06
Normalement tu ne devrais pas avoir de probs si tu utilises ca :

CString Msg;
Msg.Format(_T(




"Partie gagnée en %d clics !\nUne nouvelle partie commence !\nCliquez sur OK pour commencer."

),m_Ta_Variable);



// Retour à la ligne avec \n
AfxMessageBox(Msg, MB_OK, MB_ICONINFORMATION);
// Choix des boutons MB_OK ou MB_OKCANCEL
// Choix de l'icone MB_ICONINFORMATION ou MB_ICONERROR ou MB_ICONEXCLAMATION etc etc etc
0
Ilmen_ Messages postés 55 Date d'inscription dimanche 13 mai 2007 Statut Membre Dernière intervention 10 août 2007
25 mai 2007 à 14:20
J'ai ajouté une case WM_COMMAND, mais cela m'a donné de nombreuses erreurs de compilation...

<table align="center" bgcolor="#C9F4FF" width="500px" border="1" title="Code">
----,

/* 210 */ MessageBox(hWnd, message, \"BASE_COUNT\", MB_OK);

/* 211 */ SetWindowText(AnalyseBox, message);

/* 212 */

/* 213 */ break;

/* 214 */

/* 215 */ case WM_COMMAND:

/* 216 */ NotificationControle(hWnd,message,wParam,lParam);

/* 217 */ return 0;

/* 218 */

/* 219 */ case WM_CLOSE:

/* 220 */ DestroyWindow(hWnd);

/* 221 */ return 0;

/* 222 */

/* 223 */ case WM_DESTROY:

/* 224 */ PostQuitMessage(0);

/* 225 */ return 0;

/* 226 */

/* 227 */ default:

/* 228 */ return DefWindowProc(hWnd, message, wParam, lParam);

/* 229 */ }

/* 230 */ }

</td>






AnalyseurADN.cpp In function `void NotificationControle(HWND__*, UINT, WPARAM, LPARAM)':

215 AnalyseurADN.cpp jump to case label

204 AnalyseurADN.cpp crosses initialization of `char contig_lenght[5]'

203 AnalyseurADN.cpp crosses initialization of `char message[40]'

182 AnalyseurADN.cpp crosses initialization of `int G_total'

181 AnalyseurADN.cpp crosses initialization of `int A_total'

180 AnalyseurADN.cpp crosses initialization of `int C_total'

179 AnalyseurADN.cpp crosses initialization of `int T_total'

(...)




Ce qui est bizarre, c'est que les erreurs sont signalés de bas en haut, et elles sont aussi d'un type étrange (<tt>crosses initialization</tt>)... =/
</td>
</tr>
</table>
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
25 mai 2007 à 15:08
c'est peut-être inutile dans ce cas mais ne devrais-tu pas mettre des break; à chaque fin de case ?

Loki
0
Ilmen_ Messages postés 55 Date d'inscription dimanche 13 mai 2007 Statut Membre Dernière intervention 10 août 2007
25 mai 2007 à 15:38
<!-- jump to case label -->
J'ai réglé le problème "<tt>jump to case label</tt>", qui avais pour origine le fait que j'avais placé la case<tt>WM_COMMAND</tt> (message) dans le même <tt>switch</tt> que <tt>iId</tt>. ^^'
Il me reste toutefois une erreur de compilation :

<table align="center" bgcolor="#C9F4FF" width="500px" border="1" title="Code">----,
/* 215 */

/* 216 */ switch(message)

/* 217 */ {

/* 218 */ case WM_COMMAND:

/* 219 */ NotificationControle((HWND)hWnd, (UINT)message, (WPARAM)wParam, (LPARAM)lParam);

/* 220 */ break;

/* 221 */

/* 222 */ case WM_CLOSE:

/* 223 */ DestroyWindow(hWnd);

/* 224 */ break;

/* 225 */

/* 226 */ case WM_DESTROY:

/* 227 */ PostQuitMessage(0);

/* 228 */ break;

/* 229 */ }

/* 230 */ }

/* 231 */

/* 232 */ switch(iCode)

/* 233 */ {

/* 234 */ case BN_CLICKED:

/* 235 */ NotificationControle((HWND)hWnd, (UINT)message, (WPARAM)wParam, (LPARAM)lParam);

/* 236 */ break;

/* 237 */ }

/* 238 */ }

/* 239 */

/* 240 */LRESULT CALLBACK procedureFenetrePrincipale(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
</td>

232 AnalyseurADN.cpp expected unqualified-id before "switch"
232 AnalyseurADN.cpp expected `,' or `;' before "switch"
238 AnalyseurADN.cpp expected declaration before '}' token
Makefile.win [Build Error] [AnalyseurADN.o] Error 1

</td>
</tr>
</table>
0
Ilmen_ Messages postés 55 Date d'inscription dimanche 13 mai 2007 Statut Membre Dernière intervention 10 août 2007
25 mai 2007 à 15:40
case <tt>WM_COMMAND</tt>
0
Ilmen_ Messages postés 55 Date d'inscription dimanche 13 mai 2007 Statut Membre Dernière intervention 10 août 2007
25 mai 2007 à 17:37
J'ai réglé le problème « "232 AnalyseurADN.cpp expected unqualified-id before "switch" », mais mon MessageBox ne veux toujours pas apparaître…

Je crois que cela vient du bouton, car le <tt>SetWindowText()</tt> de la ligne 211 ne fonctionne pas non plus. =o
Mise à jour du fichier : AnalyseurADN.cpp.
0
Ilmen_ Messages postés 55 Date d'inscription dimanche 13 mai 2007 Statut Membre Dernière intervention 10 août 2007
25 mai 2007 à 18:20
J'ai réussis à afficher ma MessageBox. En faite, j'avais déjà un <tt>switch(message)</tt> dans <tt>LRESULT CALLBACK procedureFenetrePrincipale(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)</tt>.

Aussi, j'ai placé mon WM_COMMAND dans LRESULT CALLBACK, et ça a marché.


Toutefois, lorsque la MessageBox s'ouvre et que je la ferme ou que je clique sur le bouton MB_OK, la MessageBox s'ouvre de nouveau immédiatement après, pas moyen de s'en débarrasser...

Je suis alors obligé de fermer mon application mais son processus reste actif, je suis donc obligé de terminer le processus avec le gestionnaire des tâches.
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
25 mai 2007 à 18:23
boucle infinie sur la messagebox ?

Loki
0
Ilmen_ Messages postés 55 Date d'inscription dimanche 13 mai 2007 Statut Membre Dernière intervention 10 août 2007
25 mai 2007 à 18:44
Loki6 => En faite, j'avais mis NotificationControle au lieu de MessageControle :




switch(iCode)

{

case BN_CLICKED:
NotificationControle(hWnd, message, wParam, lParam);

break;

}
0