Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Invité de passage
    Inscrit en
    septembre 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : septembre 2009
    Messages : 5
    Points : 1
    Points
    1

    Par défaut DestroyWindow et plusieurs fenêtres

    Bonjour,

    j'ai un problème avec la fonction Win32 DestroyWindow()

    Voici mon problème dans les grandes lignes :
    J'ai créé deux fenêtres avec CreateWindowExW et je souhaite supprimer la première car
    elle ne m'est plus d'aucune utilité.
    Je fais donc DestroyWindow(hWin1) et il me détruit la deuxième aussi...


    Voici des extraits de mon code (c'est du C openGL avec wgl seulement) :
    ma Window Class a les styles suivants
    Code :
    1
    2
    UI_windowClass.style = CS_HREDRAW | CS_VREDRAW;
    Ma première fenêtre vide et non-affichée est créée comme cela :
    Code :
    1
    2
    3
    4
    5
    6
    UI_hDummy = CreateWindowExW(
    	(WS_EX_APPWINDOW),
    	L"UI_WindowClass",L"",
    	(WS_TILEDWINDOW),20,40,
    	40,40, (HWND) 0,0,	GetModuleHandleW(0),0);
    Ensuite, avant de créer la deuxième fenêtre, je détruis la première :
    Code :
    1
    2
    DestroyWindow(hWin); // hWin = UI_hDummy
    Puis je crée la seconde :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    UI_hWindow = CreateWindowExW(
    	(WS_EX_APPWINDOW|WS_EX_ACCEPTFILES),
    	L"UI_WindowClass",L"",
    	(WS_TILEDWINDOW|WS_VSCROLL),20,40,
    	(int) (scaleXY * 640),(int) (scaleXY * 480),
    	(HWND) parentwindowhwnd,0,
    	GetModuleHandleW(0),0);
    ShowWindow(UI_hWindow, SW_SHOW);
    UpdateWindow(UI_hWindow);
    Je crée la scène OpenGL et le rendu se fait deux ou trois fois puis la fenêtre se
    ferme du fait du DestroyWindow.

    Si je fais sans DestroyWindow tout se passe bien, mais
    j'aimerais comprendre pourquoi la deuxième fenêtre se ferme alors
    qu'elle n'existait même pas avant le DestroyWindow ?

    edit : pour info, c'est une application console qui lance une fenêtre OpenGL (en fait deux).

  2. #2
    Invité de passage
    Inscrit en
    septembre 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : septembre 2009
    Messages : 5
    Points : 1
    Points
    1

    Par défaut

    Bon je pense que j'ai trouvé le problème, même si je ne comprends pas pourquoi il y a autant de latence après le DestroyWindow.

    Sur msdn, il est écrit que lors d'un DestroyWindow un message WM_QUIT est envoyé et que celui-ci provoque le retour d'un zéro (FALSE) par la fonction GetMessage.
    Fonction qui est utilisée après la création de la deuxième fenêtre .

    Ce qui est bizarre, c'est que le message WM_QUIT est envoyé bien avant la création de la deuxième fenêtre et encore plus avant GetMessage qui en plus recoit d'autre message entre-temps... Bizarre, bizarre...

    Edit :
    ça y est .
    Le problème venait de la WindowProcedure et de la gestion des messages. Les deux fenêtres utilisent la même procédure de fenêtre avec
    Code :
    1
    2
    3
    case WM_DESTROY:
    	PostQuitMessage(0);
    Maintenant je test pour savoir quelle fenêtre est détruite et si c'est la première je n'exécute pas PostQuitMessage.
    My bad .

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •