DialogBox qui ne s'affiche que sur mon PC

Signaler
Messages postés
283
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
4 juillet 2007
-
Messages postés
283
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
4 juillet 2007
-
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

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
C'est tout a fait incompréhensible... Qu'est ce que tu as dans MainProc?
Messages postés
283
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
4 juillet 2007
2
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
Messages postés
283
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
4 juillet 2007
2
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
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
283
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
4 juillet 2007
2
Non... Ca créé un bug dans la fenêtre...

CyberP,
Celui qui dit que toute question a une réponse
Messages postés
283
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
4 juillet 2007
2
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
Messages postés
283
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
4 juillet 2007
2
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
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
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).
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
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++
Messages postés
283
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
4 juillet 2007
2
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