DialogBox qui ne s'affiche que sur mon PC

CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 - 23 févr. 2004 à 10:12
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 - 23 févr. 2004 à 16:25
J'ai créé un programme dont l'interface est uniquement composée d'une dialogbox. Mais quand je donne le programme à quelqu'un d'autre sur le net (je ne peux donc pas faire un débugage), celui-ci me dit que rien ne se passe quand il lance le programme. Avec un système de MessageBox, j'ai réussi à comprendre que c'est en fait la dialogbox qui ne veut pas s'afficher...

Je l'ai créé avec l'éditeur de resources de vc++ (6.0), j'ai bien mis "popup" dans le style de fenêtre (sinon ca n'apparait pas non plus chez moi, car je ne spécifie pas de hWnd dans l'ouverture) et après une vingtaine de tests où j'ai modifié un peu tous les paramètres, ca n'apparait toujours pas...

Voici comment j'appelle la boite de dialogue :
DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, MainProc);

Même résultat si je met NULL pour le premier paramètre

CyberP,
Celui qui dit que toute question a une réponse

10 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
23 févr. 2004 à 10:47
C'est tout a fait incompréhensible... Qu'est ce que tu as dans MainProc?
0
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 2
23 févr. 2004 à 11:15
J'ai ca (en espérant qu'on puisse lire) :

BOOL CALLBACK MainProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch(message) {
case WM_PAINT:{
Progression = GetDlgItem(hWnd, IDC_PROGRESSION);
SendMessage(Progression, PBM_SETBARCOLOR, NULL, 180);
SendMessage(Progression, PBM_SETRANGE, NULL, MAKELPARAM(0, 15));
break;
}
case WM_CLOSE:{
EndDialog(hWnd, 0);
break;
}
case WM_COMMAND: {
switch(LOWORD(wParam)) {
case IDC_START:{

// Une grande partie du programme ici
break;
}
}
}
default: {
return FALSE;
}
}

return TRUE;
}

CyberP,
Celui qui dit que toute question a une réponse
0
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 2
23 févr. 2004 à 11:18
Je crois que j'ai trouvé mais je ne peux pas le faire tester pour le moment... J'ai mis

return DefWindowProc(hWnd, message, wParam, lParam);

à la place de return TRUE ou return FALSE

CyberP,
Celui qui dit que toute question a une réponse
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
23 févr. 2004 à 11:22
en toute logique tu ne dois pas appeler DefWindowProc mais retourner FALSE comme tu le fais dans default:
Mais a mon avis ca ne vient pas de la, ca viendrait plutot du fait que tu utilise une progress bar, ca il faut appeler InitCommonControls
0

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

Posez votre question
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 2
23 févr. 2004 à 11:24
Non... Ca créé un bug dans la fenêtre...

CyberP,
Celui qui dit que toute question a une réponse
0
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 2
23 févr. 2004 à 11:25
Je vais essayer de tester sans la progressbar (pour voir si c'est bien ca)

CyberP,
Celui qui dit que toute question a une réponse
0
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 2
23 févr. 2004 à 11:27
Ah oui, ce qui est dans WM_PAINT je voulais le mettre dans WM_CREATE mais ca ne s'est pas déclenché (bizarrement), il y a peut être un rapport entre les deux

CyberP,
Celui qui dit que toute question a une réponse
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
23 févr. 2004 à 12:56
Salut,
Une dialogbox ne recoit pas WM_CREATE mais WM_INITDIALOG.
Tout tes GetDlgItem() doivent etre exécutés lors du traitement de ce message (surtout pas dans WM_PAINT).
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 févr. 2004 à 13:39
Et WM_INITDIALOG doit retourner 1, les autres 0.
Pourquoi ne copies tu pas un de nos exemples en source et tu adaptes a l'emplacement des procedures.

ciao...
BruNews, Admin CS, MVP Visual C++
0
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 2
23 févr. 2004 à 16:25
J'ai remplacé la barre de progression par un simple static qui indique les %. C'est moins beau, mais ca marche... Merci pour l'idée (j'aurai surement pas deviné autrement) Sinon, c'est la première fois que j'essayais de faire quelque chose lors du lancement d'une DialogBox, je n'avais pas fait attention à ce initdialog avant

CyberP,
Celui qui dit que toute question a une réponse
0
Rejoignez-nous