MessageBox qui n'apparait pas

Résolu
Signaler
Messages postés
55
Date d'inscription
dimanche 13 mai 2007
Statut
Membre
Dernière intervention
10 août 2007
-
Messages postés
55
Date d'inscription
dimanche 13 mai 2007
Statut
Membre
Dernière intervention
10 août 2007
-
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

Messages postés
55
Date d'inscription
dimanche 13 mai 2007
Statut
Membre
Dernière intervention
10 août 2007

<!-- 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>
Messages postés
63
Date d'inscription
mercredi 7 février 2007
Statut
Membre
Dernière intervention
14 juin 2007

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.
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009
2
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
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
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.
Messages postés
14
Date d'inscription
jeudi 9 juin 2005
Statut
Membre
Dernière intervention
25 mai 2007

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
Messages postés
55
Date d'inscription
dimanche 13 mai 2007
Statut
Membre
Dernière intervention
10 août 2007

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>
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009
2
c'est peut-être inutile dans ce cas mais ne devrais-tu pas mettre des break; à chaque fin de case ?

Loki
Messages postés
55
Date d'inscription
dimanche 13 mai 2007
Statut
Membre
Dernière intervention
10 août 2007

<!-- 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>
Messages postés
55
Date d'inscription
dimanche 13 mai 2007
Statut
Membre
Dernière intervention
10 août 2007

case <tt>WM_COMMAND</tt>
Messages postés
55
Date d'inscription
dimanche 13 mai 2007
Statut
Membre
Dernière intervention
10 août 2007

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.
Messages postés
55
Date d'inscription
dimanche 13 mai 2007
Statut
Membre
Dernière intervention
10 août 2007

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.
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009
2
boucle infinie sur la messagebox ?

Loki
Messages postés
55
Date d'inscription
dimanche 13 mai 2007
Statut
Membre
Dernière intervention
10 août 2007

Loki6 => En faite, j'avais mis NotificationControle au lieu de MessageControle :




switch(iCode)

{

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

break;

}