Contrôles invisibles sans redimensionnement de la fenêtre

cs_Tibabou Messages postés 129 Date d'inscription mercredi 2 janvier 2002 Statut Membre Dernière intervention 7 juillet 2012 - 5 juil. 2005 à 16:04
cs_Xaviou Messages postés 154 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 2 octobre 2009 - 7 juil. 2005 à 18:16
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

cs_Xaviou Messages postés 154 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 2 octobre 2009
5 juil. 2005 à 21:15
As-tu pensé à faire un UpdateWindow(hWndMain) après avoir créé tes contrôles et initialisé OpenGl ?
0
cs_Tibabou Messages postés 129 Date d'inscription mercredi 2 janvier 2002 Statut Membre Dernière intervention 7 juillet 2012
6 juil. 2005 à 11:42
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
0
cs_Xaviou Messages postés 154 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 2 octobre 2009
6 juil. 2005 à 21:26
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)
0
cs_Tibabou Messages postés 129 Date d'inscription mercredi 2 janvier 2002 Statut Membre Dernière intervention 7 juillet 2012
7 juil. 2005 à 11:34
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Xaviou Messages postés 154 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 2 octobre 2009
7 juil. 2005 à 18:16
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.)
0
Rejoignez-nous