cs_Nasman
Messages postés202Date d'inscriptionmardi 17 mai 2005StatutMembreDernière intervention29 septembre 20083 8 févr. 2006 à 09:40
Bonjour,
Je te remercie beaucoup de te pencher sur mon pb, mais je pense avoir besoin de plus de précisions. Qu'entends tu avec handle global, est-ce le handle Instance qui aurait besoin d'être restauré. J'ai fait quelques essais en ce sens mais sans succès.
J'ai beau chercher, je ne vois pas en quoi le fait d'ouvrir un fichier permet de ne plus avoir de pb - Si ce n'est que l'appel du message paint créé un handle de contexte qui n'est pas fait s'il n'y a pas de fichier d'ouvert.
?????
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 20142 8 févr. 2006 à 00:03
salut,
je pense que j'ai trouvé d'ou vient ton erreur qui n'en est pas une, je m'etais déjà fait avoir auparavant...
lors du WM_CREATE, tu doit mettre a jour le handle global avec le handle passé en parametre a la WndProc. Celui retourné par la fonction CreateWindow te genere ce genre de probleme.
Est-ce que c'est un handle transitoire ou quoi ???
@++
cs_Nasman
Messages postés202Date d'inscriptionmardi 17 mai 2005StatutMembreDernière intervention29 septembre 20083 7 févr. 2006 à 15:41
> PATATALO
L'utilisation de la MessageBox avec le paramètre NULL fait apparaitre la MessageBox derrière la fenêtre si aucun fichier n'est ouvert et au premier plan dans le cas contraire. Si on utilise le handle retourné par GetForegroundWindow, l'application est plantée si aucun fichier n'est ouvert. La fenêtre apparait au premier plan si un fichier est ouvert.
Si tu vois ce qui cloche...
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 20142 7 févr. 2006 à 14:39
pour eviter les warnings et pour faciliter la mise a jour dans les declaration section .data
ofn resd 19 ;structure pour sélection fichier à lire
->
ofn times OPENFILENAME_size db 0
@++
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 20142 7 févr. 2006 à 13:12
salut,
1 - au vu du code qui me semble correct, ( j'ai pas tout tracé pasque c'est quand meme un peu le bord... là dedans ;-) essaye de passer NULL comme parametre de handle window a la fonction MessageBox.
2 - j'ai rien vu de tel mais attention a ne modifier aucun des registres esi,edi et ebx en sortie de WndProc.
@++
cs_Nasman
Messages postés202Date d'inscriptionmardi 17 mai 2005StatutMembreDernière intervention29 septembre 20083 7 févr. 2006 à 08:20
Bonjour PATATALO,
Merci pour ce tuyau, je n'avais pas suffisamment potassé la doc en ma disposition. Celà m'évitera de devoir inverser les conditions des tests et de mettre des jump à tout va. La lisibilité y gagnera.
Peux tu me dire également pourquoi le programme plante (ou plutôt ne répond plus) si l'on sélectionne la rubrique "A propos du programme" avant d'ouvrir un fichier - J'ai d'ailleurs dû désactiver cette option au démarrage. La fonction MessageBox est parfois capricieuse.
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 20142 7 févr. 2006 à 08:11
re,
un autre truc vu dans la dll. pour tester le premier bit a 1, il existe l'instruction bsf/bsr ( bit scan forward / bit scan reverse ).
taille
dec ecx
shl eax,1 ;dcale gauche jusqu' avoir un bit non nul
jnc taille
mov eax,0 ;calcule la puissance de 2
rcl eax,cl
@++
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 20142 7 févr. 2006 à 07:57
salut,
tres bon boulot,
pour la gestion WndProc, vu que je ne pense pas que tu ai fait ce programme pour un 286, tu peux utiliser les jmp conditionnels near:
cmp eax,WM_CREATE
je near Create
cmp eax,WM_COMMAND
je near Command
cmp eax,WM_LBUTTONDOWN
je near clcg
...
d'une maniere générale, cela règle le probleme du warning qui te dit que le saut est trop loin.
4 févr. 2010 à 12:18
mais juste une question
es ce que si possible d'avoirs cette travail avec java??
et merci pour vos aides
8 févr. 2006 à 15:13
J'ai testé ta proposition mais hélas celà ne résout pas le problème. Il me plante le programme si je n'ouvre pas un fichier.
Nota: Pour la MessageBox, je lui passe l'argument [WindowHandle]
A+
8 févr. 2006 à 10:14
Create
push dword FontStandard
call [CreateFontIndirectA]
mov dword [hFontStandard], eax
push dword [ebp+8] ; parametre hWin
pop dword [WindowHandle]
leave
ret 16
@++
8 févr. 2006 à 09:40
Je te remercie beaucoup de te pencher sur mon pb, mais je pense avoir besoin de plus de précisions. Qu'entends tu avec handle global, est-ce le handle Instance qui aurait besoin d'être restauré. J'ai fait quelques essais en ce sens mais sans succès.
J'ai beau chercher, je ne vois pas en quoi le fait d'ouvrir un fichier permet de ne plus avoir de pb - Si ce n'est que l'appel du message paint créé un handle de contexte qui n'est pas fait s'il n'y a pas de fichier d'ouvert.
?????
8 févr. 2006 à 00:03
je pense que j'ai trouvé d'ou vient ton erreur qui n'en est pas une, je m'etais déjà fait avoir auparavant...
lors du WM_CREATE, tu doit mettre a jour le handle global avec le handle passé en parametre a la WndProc. Celui retourné par la fonction CreateWindow te genere ce genre de probleme.
Est-ce que c'est un handle transitoire ou quoi ???
@++
7 févr. 2006 à 15:41
L'utilisation de la MessageBox avec le paramètre NULL fait apparaitre la MessageBox derrière la fenêtre si aucun fichier n'est ouvert et au premier plan dans le cas contraire. Si on utilise le handle retourné par GetForegroundWindow, l'application est plantée si aucun fichier n'est ouvert. La fenêtre apparait au premier plan si un fichier est ouvert.
Si tu vois ce qui cloche...
7 févr. 2006 à 14:39
ofn resd 19 ;structure pour sélection fichier à lire
->
ofn times OPENFILENAME_size db 0
@++
7 févr. 2006 à 13:12
1 - au vu du code qui me semble correct, ( j'ai pas tout tracé pasque c'est quand meme un peu le bord... là dedans ;-) essaye de passer NULL comme parametre de handle window a la fonction MessageBox.
2 - j'ai rien vu de tel mais attention a ne modifier aucun des registres esi,edi et ebx en sortie de WndProc.
@++
7 févr. 2006 à 08:20
Merci pour ce tuyau, je n'avais pas suffisamment potassé la doc en ma disposition. Celà m'évitera de devoir inverser les conditions des tests et de mettre des jump à tout va. La lisibilité y gagnera.
Peux tu me dire également pourquoi le programme plante (ou plutôt ne répond plus) si l'on sélectionne la rubrique "A propos du programme" avant d'ouvrir un fichier - J'ai d'ailleurs dû désactiver cette option au démarrage. La fonction MessageBox est parfois capricieuse.
7 févr. 2006 à 08:11
un autre truc vu dans la dll. pour tester le premier bit a 1, il existe l'instruction bsf/bsr ( bit scan forward / bit scan reverse ).
taille
dec ecx
shl eax,1 ;dcale gauche jusqu' avoir un bit non nul
jnc taille
mov eax,0 ;calcule la puissance de 2
rcl eax,cl
@++
7 févr. 2006 à 07:57
tres bon boulot,
pour la gestion WndProc, vu que je ne pense pas que tu ai fait ce programme pour un 286, tu peux utiliser les jmp conditionnels near:
cmp eax,WM_CREATE
je near Create
cmp eax,WM_COMMAND
je near Command
cmp eax,WM_LBUTTONDOWN
je near clcg
...
d'une maniere générale, cela règle le probleme du warning qui te dit que le saut est trop loin.
@++