CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

(Win32/C)Problème multi-fenêtres

lord_kalipsy
lord_kalipsy
Niveau 10
10 janvier 2005 à 05:04:46

Arf toujours trop court ce titre . ..

Ahem . ..

Alors b´jour :)

J´essais présentement de faire une simple application qui, quand on appuis sur un bouton, crée une autre fenêtre avec un bouton dans celle-ci un bouton pour fermer cette fenêtre ( la deuxième, pas le première :-p ) . Bon comme je sens que j´en ai plusoeur j´vais faire euh . .. bah imaginé vous un dessin dans votre tête ( faute d´hébergeur pour une image . .. )

Fenêtre A ( WinMain, si on ferme cette fenêtre on quitte l´appli.): Possède un controle ( bouton pour créé la fenêtre B. Possède un autre bouton pour quitter l´application ( un genre de " QUIT" )

Fenêtre B : Possède un controle pour se fermer elle même. :) ( Sans quitter l´applivcation).

Je tiens à préciser que j´utilise pas de MDI ( peux importe ce que ça signifie ) ni de dialogs. De plus je code en ASM avec MASM32, mais si vous avez de la doc/exemples en C/C++ ça roule. :)

Je créer mes control ( bouton ) quand le message WM_CREATE est envoyé. ( Pour les fenêtres A et B )

Le problème c´est que quand je pèse sur le bouton " QUIT" -> Ça fonctionne mal, en fait je dois peser un nombre de fois équivalent au nombre de fois que j´appuis sur le bouton de la fenêtre B :ouch:

Sinon quand je quitte en pesant sur la croix de la fenêtre A, le processus reste encore en fonction . ..

J´utilise deux fonction pour les messages ( une pour chaque fenêtre ) .

J´ai mis mon code sur le Wall ici : http://wall.cours-info.net/?id=323

Merci :-)

Psy³

Ps : j´espère ne pas avoir été " trop vraiment pas clair" :-)))

dnob700
dnob700
Niveau 10
10 janvier 2005 à 18:01:04

bon, je ne lis pas couramment l´asm, mais je ne comprend pas ce que tu veux dire là :

" Le problème c´est que quand je pèse sur le bouton " QUIT" -> Ça fonctionne mal, en fait je dois peser un nombre de fois équivalent au nombre de fois que j´appuis sur le bouton de la fenêtre B "

que veut tu dire ? tu parle du boutons pour fermer tout l´application, tu doit appuyer dessus autant de fois que tu appuie sur le boutons pour créer une fenêtre B ?

ta fenêtre n´est pas modal ? je veux dire que quand la fenêtre B s´ouvre, tu peut toujours cliquer sur la fenêtre A sans que ça fasse Beep ?

dans ce cas là, j´ai peut-être une idée.
Quand u as plusieurs fenêtre, ej pense que le message de fin d´application ne doit être transmis qu´à une seule d´entre elle, si tu veux que tout ce ferme, il faut que le message soit trnasmis par ton code au autre fen^tre. je n´en suis pas sur mais je pense qu´il doit y avoir quelque chose comme ça.

est ce que dans AboutProc

tu ne devrai pas mettre un

. ELSEIF uMsg==WM_DESTROY
invoke PostQuitMessage,NULL

enfin, j´en sais rien, mais essaye toujours.

lord_kalipsy
lord_kalipsy
Niveau 10
10 janvier 2005 à 20:32:45

" ta fenêtre n´est pas modal ? je veux dire que quand la fenêtre B s´ouvre, tu peut toujours cliquer sur la fenêtre A sans que ça fasse Beep ? "

Non ça fait pas beep ^^

J´vais esseyé ce que tu m´as dit . .. le problème c´est que ma deuxième fenêtre ( la B ) est déjà fermé alors...

Juste pour être sûr : dans une appli avec plusieurs fenêtre, chacune d´entre elle à son propre WndProc hein ?

Merci de ton aide,

Psy³

Ps : si tu as une idée d´un endroit ou je pourrais trouver un exemple d´un prog du genre ( même en C/C++ ) pense à moi. ^^ ( J´ai déjà regardé sur codes-sources.com )

dnob700
dnob700
Niveau 10
10 janvier 2005 à 20:42:08

mais est ce que tu pourrait expliquer un tout petit peu plus précisemment le problème.

je veux dire, le nombre de fois que tu doit cliquer sur le bouton quitter de la fenêtre A est le nombre de fenêtre B ouverte ?

le problème est peut-être dans la boucle des mesasges : si elle s´arrète par ce qu´une fenêtre fait un postquitmessage et que l´autre n´a pas quitter, alors personne ne lui envoie de message.

sinon ya la méthode bourin : tu définit une variable globale ( je sais pas comment on fait en asm) à tout ton prog, et si elle elle est mise à 1 disont toute les fenêtre sorte de leurs boucle de messages ( tu le test au tout début du WndProc et du AboutProc et tu le mets lorsqu´une des fenêtre se quitte).

bon, je sais pas trop, j´émets des idées.

lord_kalipsy
lord_kalipsy
Niveau 10
10 janvier 2005 à 20:49:50

Hum attend je vien de remarquer quelque chose, j´dois cliqué 2 fois sur Quit ( fenêtre A ) deux fois, alors qu´avant c´était trois ( Hallucination ? ? )

Je tien à dire que le bouton ok de la fenêtre B ne fonctionne pas et que je dois fermer le fenêtre B avec la croix.

Psy³

dnob700
dnob700
Niveau 10
10 janvier 2005 à 20:58:57

pour le OK c´est normal, tune gère pas le WM_DESTROY, et je ne suis pas sur que le defwindowsproc puisse le faire.

lord_kalipsy
lord_kalipsy
Niveau 10
10 janvier 2005 à 21:00:27

" pour le OK c´est normal, tune gère pas le WM_DESTROY, et je ne suis pas sur que le defwindowsproc puisse le faire."

Ahhh, comment détruire une fenêtre sans killer le processus alors ?

lord_kalipsy
lord_kalipsy
Niveau 10
10 janvier 2005 à 21:29:59

Bon j´ai résolu le prob avec le ok ( j´envois un DestroyWindow)

Mais il me reste encore un problème : quand j´ouvre ma fenêtre B, si je quitte l´appli le processus reste en fonction ( même si j´ai quitté la fenêtre B avant )

Altonfrere
Altonfrere
Niveau 10
10 janvier 2005 à 21:45:37

j´arrive un peu tard mais pour la terminaison faut définir un test de fin pour ta boucle de message . ..

généralement sur le message WM_CLOSE ou WM_DESTROY on positionne à TRUE un booléen de fin d´application

genre :

g_bApplicationTerminee = FALSE;
while(!g_bApplicationTerminee)
{
/ / boucle de message ( Translate / Dispatch etc...)
}

et dans WNDPROC :

WM_DESTROY :
/ / . ..
g_bApplicationTerminee = TRUE;
/ / . ..

lord_kalipsy
lord_kalipsy
Niveau 10
10 janvier 2005 à 21:53:39

En fait, ça fonctionne pas seulement quand j´ai ouvert au moins une fois le AboutWindow ( fenêtre B)...

Altonfrere -> Pour ce qui est du invoke " ExitProcess,eax" je suis sur que ça sort toujours avec 0 donc je crois pas que ça vien de là. ( J´ai foutu des xor eax,eax un peu partout pour être sur ^^ )

Merci,

Psy³

Altonfrere
Altonfrere
Niveau 10
10 janvier 2005 à 21:55:13

ah oui dans ce cas ( un peu violent quand même) ca doit marcher le ExitProcess :) si ya rien à libérer après la boucle de message . ..

lord_kalipsy
lord_kalipsy
Niveau 10
10 janvier 2005 à 21:57:39

Bah en ASM, t´es obligé de faire le ExitProcess toi même ( en sortant de WinMain en C/C++, je crois que c´est automatique, alors qu´en ASM ce l´est pas)

Mais même à ça le processus reste en fonction . .. hum . ..

Psy³

lord_kalipsy
lord_kalipsy
Niveau 10
10 janvier 2005 à 21:59:08

( Notes que le ExitProcess est après la boucle du Window principal . .. hum )

Altonfrere
Altonfrere
Niveau 10
10 janvier 2005 à 22:00:28

ah j´ai pas fais attention . .. mais tu es sur que tu sors de la boucle principale ?

Altonfrere
Altonfrere
Niveau 10
10 janvier 2005 à 22:02:08

j´ai vu que tu sortais sur le GetMessage . ..

dans la doc :

If the function retrieves a message other than WM_QUIT, the return value is nonzero.

If the function retrieves the WM_QUIT message, the return value is zero.

lord_kalipsy
lord_kalipsy
Niveau 10
10 janvier 2005 à 22:02:36

Arf, c´est ça le prob je pense . .. si seulement RadASM avec un débugueur intégré . .. bon j´vais revoir mon code....

lord_kalipsy
lord_kalipsy
Niveau 10
10 janvier 2005 à 22:05:41

Roooooh j´ai toruvé ! Ça fonctionne ! Il faut mettre un invoke PostQuitMessage,NULL pour chaque fenêtre ! Moi je pensais que c´était seulement à la fene^tre principale . .. ahhh

Merci de votre aide :-)

dnob700
dnob700
Niveau 10
10 janvier 2005 à 22:22:00

de rien ( finalement c´était la première idée qui était la bonne).

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment