problème avec DialogBox

problème avec DialogBox - C++ - Programmation

Marsh Posté le 09-06-2006 à 15:21:26    

Bonjour, bon alors actuellement je fais un petit jeu en openGL et je crée la fenêtre a partir de l'API Win32.  
 
Mais voilà, je veux créer une console et pour celà j'avais voulu utiliser une boite de dialogue. Jusque là pas de problème : le crée le fichier ressource, et ma fonction DialogProc()... et au moment où j'appelle DialogBox() j'ai la boite de dialogue qui se crée mais je vois juste le bouton "Ok" et tout le reste est invisible... Deplus l'utilisation de mon CPU passe de 0 a 100%. mais par contre quand je clique sur Ok elle se ferme bien et l'utilisation de l'UC retourne a 0%. Vous auriez une idée de ce qui se passe ??? car j'avoue que là je sèche....
 
Merci :)

Reply

Marsh Posté le 09-06-2006 à 15:21:26   

Reply

Marsh Posté le 09-06-2006 à 15:31:17    

sans voir ton code, non, on est pas voyants extralucides.

Reply

Marsh Posté le 09-06-2006 à 15:50:44    

Désolé....
 
bon voila :
 
mon fichier ressource:

Code :
  1. #include "console.h"
  2. Console DIALOG
  3.    810, 20, 60, 120
  4.    STYLE WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP
  5.    CAPTION "Console Gravitation"
  6.    BEGIN
  7.       DEFPUSHBUTTON "Ok", IDM_OK, 9, 98, 42, 12
  8.    END


 
mon fichier console.h

Code :
  1. #include "main.h"
  2. #define IDM_OK 1
  3. bool APIENTRY DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);


 
mon fichier console.cpp

Code :
  1. #include "console.h"
  2. bool APIENTRY DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  3. {
  4. switch(uMsg)
  5. {
  6. case WM_INITDIALOG:
  7.  return true;
  8. case WM_COMMAND:
  9.  if(LOWORD(wParam)==IDM_OK || LOWORD(wParam)==IDCANCEL)
  10.  {
  11.   EndDialog(hwnd,0);
  12.   return true;
  13.  }
  14. default :
  15.  return false;
  16. }
  17. }


 
et puis j'apelle le tout comme ça :

Code :
  1. DialogBox(hInstance, "Console", hWnd,(DLGPROC)DialogProc);


 
Merci de me prendre en charge :)

Reply

Marsh Posté le 09-06-2006 à 15:56:25    

Tu ne testes pas le retour de DialogBox ?

Reply

Marsh Posté le 09-06-2006 à 15:57:35    

heu non... Ok, je regarde

Reply

Marsh Posté le 09-06-2006 à 16:06:59    

non, il ne sort pas d'erreur.
DialogBox() me renvoie bien le code donné par EndDialog()  (j'ai bien changé le 0 que j'avais mis dans EndDialog() par un autre chiffre. 0 étant le message d'erreur d'un handle de fenêtre parente invalide)

Reply

Marsh Posté le 09-06-2006 à 16:13:57    

et euh, tu mets "Console" en paramètre de DialogBox, en lieu et place du paramètre UINT Message ? Y'aurait pas comme un souci ?

Reply

Marsh Posté le 09-06-2006 à 16:14:26    

J'ai l'impression qu'il faudrait que tu vérifies tes entrées et tes sorties plus globalement dans ton programme, avec la doc ouverte à coté de ton IDE, ca risque de pas faire de mal.

Reply

Marsh Posté le 09-06-2006 à 16:29:59    

Le hWnd correspond bien au hWnd de la fenêtre parente ? Passe le à NULL sinon

Reply

Marsh Posté le 09-06-2006 à 16:36:33    

heu je suis désolé mais j'avoue ne pas comprendre (je suis un débutant...) Quand je regarde le Platform SDK il me donne ça :
 

Code :
  1. INT_PTR DialogBox(
  2.    HINSTANCE hInstance,
  3.    LPCTSTR lpTemplate,
  4.    HWND hWndParent,
  5.    DLGPROC lpDialogFunc
  6. );


 
et puis il dit que "lpTemplate" est un pointeur vers une chaine de caractère terminé par le caractère nul ou un entier... Donc ça me paraissait cohérent avec ce que j'avais fait.
et puis je l'avais appris là : http://chgi.developpez.com/windows/dialogue/
 
en ce qui concerne ta deuxième remarque j'avoue ne pas comprendre aussi (désolé... ). En ce qui conserne mon IDE c'est Visual C++ Express edition... donc tu me conseille de voir MSDN ... mais je doit aller voir quoi ?
 

Reply

Marsh Posté le 09-06-2006 à 16:36:33   

Reply

Marsh Posté le 09-06-2006 à 16:42:33    

heu mon dernier message était pour _darkalt3_ (je met 3 heures a taper :) )
Merci harkonnen de t'intéresser a mon cas ...

Reply

Marsh Posté le 09-06-2006 à 16:43:27    

Code :
  1. bool APIENTRY DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)


 
ou

Code :
  1. INT_PTR DialogBox(
  2.    HINSTANCE hInstance,
  3.    LPCTSTR lpTemplate,
  4.    HWND hWndParent,
  5.    DLGPROC lpDialogFunc
  6. );


 
:??:
 
MSDN c'est en général pour bien vérifer le type de tes paramètres et les valeurs de retour, c'est une référence.

Reply

Marsh Posté le 09-06-2006 à 16:52:46    

heu je comprend pas pourquoi tu dit "ou" c'est pas les même et elles ont pas le même role...  :heink:  
 
DialogBox() c'est pour créer la boite de dialogue et DialogProc() pour écouter les messages... je suis bien conscient que c'est pas moi qui va t'apprendre quelque chose mais je comprend pas ta remarque...

Reply

Marsh Posté le 09-06-2006 à 16:58:50    

au temps pour moi :o
 
vraiment dsl, j'ai pas fait gaffe  
 
 [:anauff]


Message édité par _darkalt3_ le 09-06-2006 à 16:59:34
Reply

Marsh Posté le 09-06-2006 à 17:04:03    

tu sais passer avec le debugger dans la méthode de création de ta console  et voir ce qui s'y trame ?

Reply

Marsh Posté le 09-06-2006 à 17:11:35    

heu non, enfin pas encore... je vais voir MSDN :)

Reply

Marsh Posté le 09-06-2006 à 17:47:48    

Bon j'ai trouvé sur Google comment utiliser le debugger mais par contre ils ont l'air de dire que visual intègre par defaut les info nécéssaire au débuggage dans l'exécutable. Or quand je lance le debugger il me dit qu'il ne trouve pas d'info de débuggage pour mon programme ... Vous sauriez comment on l'active ?
 
Merci :)

Reply

Marsh Posté le 09-06-2006 à 20:56:41    

il faut compiler le soft en debug (par défaut sous l'ide a partir de  visual 2005), selectionner les lignes ou le programme s'arrete avec F9 (plusieurs lignes à selectionner si nécessaire), lancer le debug avec F5, une fois breaké, continuer avec F10 et entrer dans la ou les fonctions de la ligne en cours avec F11
 
Une fois le programme stoppé en debug pendant son execution, tu peux consulter la valeur de telle ou telle variable, espionner la mémoire, etc. Tout est dans les menu, genre affichage / fenetre de debug, etc.
 
le debugger est ton ami :)


---------------
Töp of the plöp
Reply

Marsh Posté le 09-06-2006 à 21:17:00    

Amonchakai a écrit :

heu mon dernier message était pour _darkalt3_ (je met 3 heures a taper :) )
Merci harkonnen de t'intéresser a mon cas ...


tu pourrais poster la totalité de ton code stp, j'ai la flemme de créer un projet Win32 pour tester :D
 
edit: laisse tomber, je vais utiliser le squelette de developpez.com


Message édité par Harkonnen le 09-06-2006 à 21:17:54

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 09-06-2006 à 21:22:49    

ouais non finalement poste tout, ça compile pas du 1er coup :whistle:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 09-06-2006 à 21:30:21    

Harko, l'humanité te doit beaucoup :o


Message édité par _darkalt3_ le 09-06-2006 à 21:30:33

---------------
Töp of the plöp
Reply

Marsh Posté le 09-06-2006 à 21:55:52    

pourquoi ? [:petrus dei]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 10-06-2006 à 08:11:30    

ben tester (souvent à ce que je crois lire) le code d'autrui pour l'aider à débugger, c'est plutot super sympa il me semble :jap:

Message cité 1 fois
Message édité par _darkalt3_ le 10-06-2006 à 08:23:14

---------------
Töp of the plöp
Reply

Marsh Posté le 10-06-2006 à 10:16:57    

MERCI Harkonnen !!!
 
Bon alors voilà mon code :
 
main.cpp
 

Code :
  1. #include "main.h"
  2. //#include "vaisseau.h"
  3. //#include "carte.h"
  4. #include "console.h"
  5. HDC   hDC=NULL;  // Private GDI Device Context
  6. HGLRC  hRC=NULL;  // Permanent Rendering Context
  7. HWND  hWnd=NULL;  // Holds Our Window Handle
  8. HINSTANCE hInstance;  // Holds The Instance Of The Application
  9. //Vaisseau joueur[2];
  10. //Carte map;
  11. bool keys[256];
  12. bool active=TRUE;  // Window Active Flag Set To TRUE By Default
  13. bool fullscreen=TRUE; // Fullscreen Flag Set To Fullscreen Mode By Default
  14. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); // Declaration For WndProc
  15. GLvoid ReSizeGLScene(GLsizei width, GLsizei height)  // Resize And Initialize The GL Window
  16. {
  17. if (height==0)          // Prevent A Divide By Zero By
  18. {
  19.  height=1;          // Making Height Equal One
  20. }
  21. glViewport(0,0,width,height);      // Reset The Current Viewport
  22. glMatrixMode(GL_PROJECTION);      // Select The Projection Matrix
  23. glLoadIdentity();         // Reset The Projection Matrix
  24. // Calculate The Aspect Ratio Of The Window
  25. glOrtho(0.0f, width, height, 0.0f, -1.0f, 1.0f);
  26. glMatrixMode(GL_MODELVIEW);       // Select The Modelview Matrix
  27. glLoadIdentity();         // Reset The Modelview Matrix
  28. }
  29. int InitGL(GLvoid)          // All Setup For OpenGL Goes Here
  30. {
  31. glShadeModel(GL_SMOOTH);       // Enable Smooth Shading
  32. glClearColor(0.0f, 0.0f, 0.0f, 0.5f);    // Black Background
  33. glClearDepth(1.0f);         // Depth Buffer Setup
  34. glEnable(GL_DEPTH_TEST);       // Enables Depth Testing
  35. glDepthFunc(GL_LEQUAL);        // The Type Of Depth Testing To Do
  36. glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations
  37. //joueur[0].init(300,250);
  38. //joueur[0].getScreen(&map.xScreen, &map.yScreen);
  39. //map.Init("data/textures/map0.jpg" );
  40. return TRUE;          // Initialization Went OK
  41. }
  42. int DrawGLScene(GLvoid)
  43. {
  44. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  45. glLoadIdentity();
  46. glColor3f(1,1,1);
  47. //map.dessin();
  48. //joueur[0].calculGravitee();
  49. //joueur[0].crash();
  50. //joueur[0].dessin();  
  51. if(keys['C'])
  52. {
  53.  int result = DialogBox(hInstance, "Console", hWnd,(DLGPROC)DialogProc);
  54.  switch(result)
  55.  {
  56.  case -1:
  57.   MessageBox(NULL, "Erreur -1", "Erreur", MB_OK);
  58.   break;
  59.  case 32:
  60.   MessageBox(NULL, "Ok pour ça", "Ok", MB_OK);
  61.   break;
  62.  case 0:
  63.   MessageBox(NULL, "fenêtre parent invalide", "Erreur", MB_OK);
  64.   break;
  65.  }
  66.  keys['C']=false;
  67. }
  68. return TRUE;
  69. }
  70. GLvoid KillGLWindow(GLvoid)        // Properly Kill The Window
  71. {
  72. if (fullscreen)          // Are We In Fullscreen Mode?
  73. {
  74.  ChangeDisplaySettings(NULL,0);     // If So Switch Back To The Desktop
  75.  ShowCursor(TRUE);        // Show Mouse Pointer
  76. }
  77. if (hRC)           // Do We Have A Rendering Context?
  78. {
  79.  if (!wglMakeCurrent(NULL,NULL))     // Are We Able To Release The DC And RC Contexts?
  80.  {
  81.   MessageBox(NULL,"Release Of DC And RC Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
  82.  }
  83.  if (!wglDeleteContext(hRC))      // Are We Able To Delete The RC?
  84.  {
  85.   MessageBox(NULL,"Release Rendering Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
  86.  }
  87.  hRC=NULL;          // Set RC To NULL
  88. }
  89. if (hDC && !ReleaseDC(hWnd,hDC))     // Are We Able To Release The DC
  90. {
  91.  MessageBox(NULL,"Release Device Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
  92.  hDC=NULL;          // Set DC To NULL
  93. }
  94. if (hWnd && !DestroyWindow(hWnd))     // Are We Able To Destroy The Window?
  95. {
  96.  MessageBox(NULL,"Could Not Release hWnd.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
  97.  hWnd=NULL;          // Set hWnd To NULL
  98. }
  99. if (!UnregisterClass("OpenGL",hInstance))   // Are We Able To Unregister Class
  100. {
  101.  MessageBox(NULL,"Could Not Unregister Class.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
  102.  hInstance=NULL;         // Set hInstance To NULL
  103. }
  104. }
  105. BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag)
  106. {
  107. GLuint  PixelFormat;   // Holds The Results After Searching For A Match
  108. WNDCLASS wc;      // Windows Class Structure
  109. DWORD  dwExStyle;    // Window Extended Style
  110. DWORD  dwStyle;    // Window Style
  111. RECT  WindowRect;    // Grabs Rectangle Upper Left / Lower Right Values
  112. WindowRect.left=(long)0;   // Set Left Value To 0
  113. WindowRect.right=(long)width;  // Set Right Value To Requested Width
  114. WindowRect.top=(long)0;    // Set Top Value To 0
  115. WindowRect.bottom=(long)height;  // Set Bottom Value To Requested Height
  116. fullscreen=fullscreenflag;   // Set The Global Fullscreen Flag
  117. hInstance   = GetModuleHandle(NULL);    // Grab An Instance For Our Window
  118. wc.style   = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; // Redraw On Size, And Own DC For Window.
  119. wc.lpfnWndProc  = (WNDPROC) WndProc;     // WndProc Handles Messages
  120. wc.cbClsExtra  = 0;         // No Extra Window Data
  121. wc.cbWndExtra  = 0;         // No Extra Window Data
  122. wc.hInstance  = hInstance;       // Set The Instance
  123. wc.hIcon   = LoadIcon(NULL, IDI_WINLOGO);   // Load The Default Icon
  124. wc.hCursor   = LoadCursor(NULL, IDC_ARROW);   // Load The Arrow Pointer
  125. wc.hbrBackground = NULL;         // No Background Required For GL
  126. wc.lpszMenuName  = NULL;         // We Don't Want A Menu
  127. wc.lpszClassName = "OpenGL";        // Set The Class Name
  128. if (!RegisterClass(&wc))         // Attempt To Register The Window Class
  129. {
  130.  MessageBox(NULL,"Failed To Register The Window Class.","ERROR",MB_OK|MB_ICONEXCLAMATION);
  131.  return FALSE;           // Return FALSE
  132. }
  133. if (fullscreen)            // Attempt Fullscreen Mode?
  134. {
  135.  DEVMODE dmScreenSettings;        // Device Mode
  136.  memset(&dmScreenSettings,0,sizeof(dmScreenSettings)); // Makes Sure Memory's Cleared
  137.  dmScreenSettings.dmSize=sizeof(dmScreenSettings);  // Size Of The Devmode Structure
  138.  dmScreenSettings.dmPelsWidth = width;    // Selected Screen Width
  139.  dmScreenSettings.dmPelsHeight = height;    // Selected Screen Height
  140.  dmScreenSettings.dmBitsPerPel = bits;     // Selected Bits Per Pixel
  141.  dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
  142.  // Try To Set Selected Mode And Get Results.  NOTE: CDS_FULLSCREEN Gets Rid Of Start Bar.
  143.  if (ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL)
  144.  {
  145.   // If The Mode Fails, Offer Two Options.  Quit Or Use Windowed Mode.
  146.   if (MessageBox(NULL,"The Requested Fullscreen Mode Is Not Supported By\nYour Video Card. Use Windowed Mode Instead?","NeHe GL",MB_YESNO|MB_ICONEXCLAMATION)==IDYES)
  147.   {
  148.    fullscreen=FALSE;  // Windowed Mode Selected.  Fullscreen = FALSE
  149.   }
  150.   else
  151.   {
  152.    // Pop Up A Message Box Letting User Know The Program Is Closing.
  153.    MessageBox(NULL,"Program Will Now Close.","ERROR",MB_OK|MB_ICONSTOP);
  154.    return FALSE;         // Return FALSE
  155.   }
  156.  }
  157. }
  158. if (fullscreen)            // Are We Still In Fullscreen Mode?
  159. {
  160.  dwExStyle=WS_EX_APPWINDOW;        // Window Extended Style
  161.  dwStyle=WS_POPUP;          // Windows Style
  162.  ShowCursor(FALSE);          // Hide Mouse Pointer
  163. }
  164. else
  165. {
  166.  dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;   // Window Extended Style
  167.  dwStyle=WS_OVERLAPPEDWINDOW;       // Windows Style
  168. }
  169. AdjustWindowRectEx(&WindowRect, dwStyle, FALSE, dwExStyle);  // Adjust Window To True Requested Size
  170. // Create The Window
  171. if (!(hWnd=CreateWindowEx( dwExStyle,       // Extended Style For The Window
  172.        "OpenGL",       // Class Name
  173.        title,        // Window Title
  174.        dwStyle |       // Defined Window Style
  175.        WS_CLIPSIBLINGS |     // Required Window Style
  176.        WS_CLIPCHILDREN,     // Required Window Style
  177.        0, 0,        // Window Position
  178.        WindowRect.right-WindowRect.left, // Calculate Window Width
  179.        WindowRect.bottom-WindowRect.top, // Calculate Window Height
  180.        NULL,        // No Parent Window
  181.        NULL,        // No Menu
  182.        hInstance,       // Instance
  183.        NULL)))        // Dont Pass Anything To WM_CREATE
  184. {
  185.  KillGLWindow();        // Reset The Display
  186.  MessageBox(NULL,"Window Creation Error.","ERROR",MB_OK|MB_ICONEXCLAMATION);
  187.  return FALSE;        // Return FALSE
  188. }
  189. static PIXELFORMATDESCRIPTOR pfd=    // pfd Tells Windows How We Want Things To Be
  190. {
  191.  sizeof(PIXELFORMATDESCRIPTOR),    // Size Of This Pixel Format Descriptor
  192.  1,           // Version Number
  193.  PFD_DRAW_TO_WINDOW |      // Format Must Support Window
  194.  PFD_SUPPORT_OPENGL |      // Format Must Support OpenGL
  195.  PFD_DOUBLEBUFFER,       // Must Support Double Buffering
  196.  PFD_TYPE_RGBA,        // Request An RGBA Format
  197.  bits,          // Select Our Color Depth
  198.  0, 0, 0, 0, 0, 0,       // Color Bits Ignored
  199.  0,           // No Alpha Buffer
  200.  0,           // Shift Bit Ignored
  201.  0,           // No Accumulation Buffer
  202.  0, 0, 0, 0,         // Accumulation Bits Ignored
  203.  16,           // 16Bit Z-Buffer (Depth Buffer)   
  204.  0,           // No Stencil Buffer
  205.  0,           // No Auxiliary Buffer
  206.  PFD_MAIN_PLANE,        // Main Drawing Layer
  207.  0,           // Reserved
  208.  0, 0, 0          // Layer Masks Ignored
  209. };
  210. if (!(hDC=GetDC(hWnd)))       // Did We Get A Device Context?
  211. {
  212.  KillGLWindow();        // Reset The Display
  213.  MessageBox(NULL,"Can't Create A GL Device Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
  214.  return FALSE;        // Return FALSE
  215. }
  216. if (!(PixelFormat=ChoosePixelFormat(hDC,&pfd))) // Did Windows Find A Matching Pixel Format?
  217. {
  218.  KillGLWindow();        // Reset The Display
  219.  MessageBox(NULL,"Can't Find A Suitable PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
  220.  return FALSE;        // Return FALSE
  221. }
  222. if(!SetPixelFormat(hDC,PixelFormat,&pfd))  // Are We Able To Set The Pixel Format?
  223. {
  224.  KillGLWindow();        // Reset The Display
  225.  MessageBox(NULL,"Can't Set The PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
  226.  return FALSE;        // Return FALSE
  227. }
  228. if (!(hRC=wglCreateContext(hDC)))    // Are We Able To Get A Rendering Context?
  229. {
  230.  KillGLWindow();        // Reset The Display
  231.  MessageBox(NULL,"Can't Create A GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
  232.  return FALSE;        // Return FALSE
  233. }
  234. if(!wglMakeCurrent(hDC,hRC))     // Try To Activate The Rendering Context
  235. {
  236.  KillGLWindow();        // Reset The Display
  237.  MessageBox(NULL,"Can't Activate The GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
  238.  return FALSE;        // Return FALSE
  239. }
  240. ShowWindow(hWnd,SW_SHOW);      // Show The Window
  241. SetForegroundWindow(hWnd);      // Slightly Higher Priority
  242. SetFocus(hWnd);         // Sets Keyboard Focus To The Window
  243. ReSizeGLScene(width, height);     // Set Up Our Perspective GL Screen
  244. if (!InitGL())         // Initialize Our Newly Created GL Window
  245. {
  246.  KillGLWindow();        // Reset The Display
  247.  MessageBox(NULL,"Initialization Failed.","ERROR",MB_OK|MB_ICONEXCLAMATION);
  248.  return FALSE;        // Return FALSE
  249. }
  250. return TRUE;         // Success
  251. }
  252. LRESULT CALLBACK WndProc( HWND hWnd,   // Handle For This Window
  253.       UINT uMsg,   // Message For This Window
  254.       WPARAM wParam,   // Additional Message Information
  255.       LPARAM lParam)   // Additional Message Information
  256. {
  257. switch (uMsg)         // Check For Windows Messages
  258. {
  259.  case WM_ACTIVATE:       // Watch For Window Activate Message
  260.  {
  261.   if (!HIWORD(wParam))     // Check Minimization State
  262.   {
  263.    active=TRUE;      // Program Is Active
  264.   }
  265.   else
  266.   {
  267.    active=FALSE;      // Program Is No Longer Active
  268.   }
  269.   return 0;        // Return To The Message Loop
  270.  }
  271.  case WM_SYSCOMMAND:       // Intercept System Commands
  272.  {
  273.   switch (wParam)       // Check System Calls
  274.   {
  275.    case SC_SCREENSAVE:     // Screensaver Trying To Start?
  276.    case SC_MONITORPOWER:    // Monitor Trying To Enter Powersave?
  277.    return 0;       // Prevent From Happening
  278.   }
  279.   break;         // Exit
  280.  }
  281.  case WM_CLOSE:        // Did We Receive A Close Message?
  282.  {
  283.   PostQuitMessage(0);      // Send A Quit Message
  284.   return 0;        // Jump Back
  285.  }
  286.  case WM_KEYDOWN:       // Is A Key Being Held Down?
  287.  {
  288.   keys[wParam] = TRUE;     // If So, Mark It As TRUE
  289.   return 0;        // Jump Back
  290.  }
  291.  case WM_KEYUP:        // Has A Key Been Released?
  292.  {
  293.   keys[wParam] = FALSE;     // If So, Mark It As FALSE
  294.   return 0;        // Jump Back
  295.  }
  296.  case WM_SIZE:        // Resize The OpenGL Window
  297.  {
  298.   ReSizeGLScene(LOWORD(lParam),HIWORD(lParam));  // LoWord=Width, HiWord=Height
  299.   return 0;        // Jump Back
  300.  }
  301. }
  302. // Pass All Unhandled Messages To DefWindowProc
  303. return DefWindowProc(hWnd,uMsg,wParam,lParam);
  304. }
  305. int WINAPI WinMain( HINSTANCE hInstance,   // Instance
  306.     HINSTANCE hPrevInstance,  // Previous Instance
  307.     LPSTR  lpCmdLine,   // Command Line Parameters
  308.     int   nCmdShow)   // Window Show State
  309. {
  310. MSG  msg;         // Windows Message Structure
  311. BOOL done=FALSE;        // Bool Variable To Exit Loop
  312. // Ask The User Which Screen Mode They Prefer
  313. if (MessageBox(NULL,"Voulez vous fonctionner en mode plein écran ?", "Plein écran ?",MB_YESNO|MB_ICONQUESTION)==IDNO)
  314. {
  315.  fullscreen=FALSE;       // Windowed Mode
  316. }
  317. // Create Our OpenGL Window
  318. if (!CreateGLWindow("Gravitation",800,600,16,fullscreen))
  319. {
  320.  return 0;         // Quit If Window Was Not Created
  321. }
  322. while(!done)         // Loop That Runs While done=FALSE
  323. {
  324.  if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) // Is There A Message Waiting?
  325.  {
  326.   if (msg.message==WM_QUIT)    // Have We Received A Quit Message?
  327.   {
  328.    done=TRUE;       // If So done=TRUE
  329.   }
  330.   else         // If Not, Deal With Window Messages
  331.   {
  332.    TranslateMessage(&msg);    // Translate The Message
  333.    DispatchMessage(&msg);    // Dispatch The Message
  334.   }
  335.  }
  336.  else          // If There Are No Messages
  337.  {
  338.   // Draw The Scene.  Watch For ESC Key And Quit Messages From DrawGLScene()
  339.   if (active)        // Program Active?
  340.   {
  341.    if (keys[VK_ESCAPE])    // Was ESC Pressed?
  342.    {
  343.     done=TRUE;      // ESC Signalled A Quit
  344.    }
  345.    else        // Not Time To Quit, Update Screen
  346.    {
  347.     DrawGLScene();     // Draw The Scene
  348.     SwapBuffers(hDC);    // Swap Buffers (Double Buffering)
  349.    }
  350.   }
  351.   //joueur[0].ecouteTouches(keys);
  352.   if (keys[VK_F1])      // Is F1 Being Pressed?
  353.   {
  354.    keys[VK_F1]=FALSE;     // If So Make Key FALSE
  355.    KillGLWindow();      // Kill Our Current Window
  356.    fullscreen=!fullscreen;    // Toggle Fullscreen / Windowed Mode
  357.    // Recreate Our OpenGL Window
  358.    if (!CreateGLWindow("Gravitation",800,600,16,fullscreen))
  359.    {
  360.     return 0;      // Quit If Window Was Not Created
  361.    }
  362.   }
  363.  }
  364. }
  365. // Shutdown
  366. KillGLWindow();         // Kill The Window
  367. return (msg.wParam);       // Exit The Program
  368. }


 
main.h

Code :
  1. #include <windows.h>
  2. #include <gl\gl.h>
  3. #include <gl\glu.h>
  4. #include <math.h>
  5. #define PI 3.141592653f


 
bon j'ai pas absolument tout mis mais j'ai essayé avec ça et déjà j'ai le problème...
(a noter que dans la méthode DialogProc() j'ai changé le EndDialog(hwnd, 0); par EndDialog(hwnd, 32); )
 
en tout cas Merci
 
ps : Merci aussi a NeHe dont on reconnaitrera son code pour la génération d'une fenêtre openGL....

Reply

Marsh Posté le 10-06-2006 à 10:31:50    

Merci de ton explication du debugger _darkalt3_ mais c'est bien ce que j'avais trouvé sur Google...
le problème c'est que quand j'appuis sur F5 il me sort : "No Debugging Information" et là il me demande si je veux continuer si je met oui a côte de mes breakpoints il y a un panneau attention qui dit "the breakpoint will not currently be hit, no symbol have been loaded for this document"
Donc je doute que mon programme soit compilé en mode Debug...
je suis allé voir dans le menu build mais je vois pas où on peut l'activer...

Reply

Marsh Posté le 10-06-2006 à 11:24:39    

_darkalt3_ a écrit :

ben tester (souvent à ce que je crois lire) le code d'autrui pour l'aider à débugger, c'est plutot super sympa il me semble :jap:


merci :D
en fait, j'aime bien tester quand je vois du code qui n'a aucune raison de ne pas fonctionner, ce qui est le cas ici ;)
 

Amonchakai a écrit :

MERCI Harkonnen !!!
 
Bon alors voilà mon code :

bon alors j'ai testé (sous VS 2005), ça marche nickel en mode debug, mais en mode release j'ai effectivement le comportement que tu décris [:petrus75]
la suite quand j'aurais pris ma douche, généralement je trouve beaucoup de réponses à mes questions en me lavant les cheveux [:kbchris]
 
tu utilises quel logiciel pour compiler ? Dev C++ ? Visual Studio ? Code::Blocks ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 10-06-2006 à 11:44:24    

j'utilise Visual c++ express Edition 2005 :)

Reply

Marsh Posté le 10-06-2006 à 12:08:37    

j'ai trouvé [:god]
évidemment j'ai regardé partout, sauf dans le fichier le plus court : le console.cpp
tu sais pourquoi ça bloque ? parce qu'à part WM_INITDIALOG et WM_COMMAND, ta Dialog ne traite aucun autre message ! et figure toi que des messages, elle en reçoit plein, dont le fameux WM_PAINT qui permet de redessiner la fenêtre et que tu ne traites pas !
pas besoin de rajouter une clause case pour chaque message, sinon t'es encore là demain. t'as juste qu'à dire à ta boite que si elle reçoit un message qu'elle ne traite pas, alors elle laisse le système le traiter pour elle. pour ce faire, rajoute ceci dans ta clause default: de ton fichier console.cpp :

Code :
  1. default :
  2.    DefWindowProc(hwnd,uMsg,wParam,lParam);
  3.    return false;


comme ça, tous les autres messages que tu ne traites pas seront traités par la procédure de fenêtre par défaut [:god]
 
ah et tant que j'y suis, ça serait bien de traiter le WM_DESTROY aussi, si tu veux éviter les leaks [:petrus75]
ce qui nous donne pour le fichier console.cpp :
 

Code :
  1. #include "console.h"
  2.    
  3. bool APIENTRY DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  4. {
  5.    switch(uMsg)
  6.    {
  7.       case WM_DESTROY:
  8.          PostQuitMessage(0);
  9.       case WM_INITDIALOG:
  10.          return true;
  11.       case WM_COMMAND:
  12.          if(LOWORD(wParam)==IDM_OK || LOWORD(wParam)==IDCANCEL)
  13.          {
  14.             EndDialog(hwnd,0);
  15.             return true;
  16.          }
  17.       default :
  18.          DefWindowProc(hwnd,uMsg,wParam,lParam);
  19.          return false;
  20. }


et là ça marche nickel [:kbchris]
j'te laisse, mon cassoulet va refroidir [:benou_miam]
 
edit: c'est le genre de truc totalement indétectable avec un debugger :D


Message édité par Harkonnen le 10-06-2006 à 12:15:31

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 10-06-2006 à 13:51:26    

Ok, Bon ba problème résolu Merci Harkonnen !!!   :)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed