Contrôles invisibles sans redimensionnement de la fenêtre

Signaler
Messages postés
130
Date d'inscription
mercredi 2 janvier 2002
Statut
Membre
Dernière intervention
7 juillet 2012
-
Messages postés
154
Date d'inscription
dimanche 1 avril 2001
Statut
Membre
Dernière intervention
2 octobre 2009
-
Bonjour/soir,

Je rencontre un problème très étrange: j'ai sur ma fenêtre 2 contrôles avec du 3D dedans (OpenGL) et en dessous un bouton tout bête.
Au chargement de la fenêtre, les deux contrôles OpenGL sont noirs et le bouton invisible.
Si je redimmensionne ma fenêtre, la scène 3D apparaît et le bouton s'affiche.

Une idée ?

Merci d'avance...
Tibabou

5 réponses

Messages postés
154
Date d'inscription
dimanche 1 avril 2001
Statut
Membre
Dernière intervention
2 octobre 2009
1
As-tu pensé à faire un UpdateWindow(hWndMain) après avoir créé tes contrôles et initialisé OpenGl ?
Messages postés
130
Date d'inscription
mercredi 2 janvier 2002
Statut
Membre
Dernière intervention
7 juillet 2012

Je l'avais en effet placé placé après la création des contrôles mais avant l'init d'OpenGL... J'ai corrigé cette erreur: maintenant la scène 3D est visible immédiatement au lancement de la fenêtre mais le bouton.... il faut redimmensionner.

J'ai ciblé le problème:

LRESULT CALLBACK WinProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam )
{
switch(uMsg)
{


case WM_CLOSE:
PostQuitMessage(0);
break;


case WM_SIZE:
SizeOpenGL(400,300);
break;


case WM_PAINT:
Draw();
break; //sans ce break, le bouton est visible MAIS les contrôles OpenGL sont vides...


default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return FALSE;
}

Que faire ?
Merci.

Tibabou
Messages postés
154
Date d'inscription
dimanche 1 avril 2001
Statut
Membre
Dernière intervention
2 octobre 2009
1
Essayes ceci:



case WM_PAINT:

PAINTSTRUCT ps1,ps2;

BeginPaint(hWndMain,&ps1); // hWndMain = Handle de la fenêtre principale

BeginPaint(hCtrl,&ps2); // hCtrl = Handle du contrôle pour l'OpenGL

EndPaint(hCtrl,&ps2);

EndPaint(hWndMain,&ps1);

Draw();

return 0;



Tu t'appercevras en plus qu'avec cette méthode, ton prog bouffera
beaucoup moins de resources systèmes (vérifies avant et après avec le
gestionnaire des tâches)
Messages postés
130
Date d'inscription
mercredi 2 janvier 2002
Statut
Membre
Dernière intervention
7 juillet 2012

houla...c'est encore pire... Maintenant, il y a bien le bouton qui s'affiche au démarrage mais les contrôles OpenGL ne se rafraichissent que quand je redimmensionne la fenêtre; dès que je lache le bord de la fenêtre ou que je ne bouge plus la souris le clic enfoncé, la scène se fige.
Autre problème lié au précédent: une fois sur 2, les 2 contrôles OpenGL sont vides lors de "l'arrêt du redimmenssionnement de la fenêtre", c'est très bizarre...

Tibabou
Messages postés
154
Date d'inscription
dimanche 1 avril 2001
Statut
Membre
Dernière intervention
2 octobre 2009
1
C'est plus ou moins normal.

Avant d'utiliser l'astuce que je t'ai donné, ton prog bouclait avec le
message WM_PAINT, c'est à dire qu'il lui fallait sans cesse redessinner
la fenêtre.

Avec cette astuce, le message WM_PAINT n'est envoyé que lorsque c'est vraiment nécessaire.

Si tu veux une animation continue, ajoute un timer qui appelle ta fonction Draw(), ce sera beaucoup mieux (du moins à mon avis.)