/////////////////////////////////////// // Création de la fenêtre principale // /////////////////////////////////////// Image_de_fond = LoadBitmapA(Hinstance, "IMAGE_FOND_ECRAN"); Hwnd_Fenetre_Principale=CreateWindow("Style_Fenetre_Principale","Espace",WS_OVERLAPPED | WS_SYSMENU | WS_EX_TRANSPARENT ,0,0,1024,768,NULL,NULL,Hinstance,NULL); ////////////////////////////////////// // Création de la fenêtre OpenGL // ////////////////////////////////////// Hwnd_OpenGL=CreateWindowEx( WS_EX_APPWINDOW | WS_EX_WINDOWEDGE,"Style_Fenetre_OpenGL","Titre Fenêtre OpenGL", WS_CHILD | WS_VISIBLE | WS_BORDER | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, 416, 122, 600, 600, Hwnd_Fenetre_Principale, NULL, Hinstance, NULL); ShowWindow(Hwnd_OpenGL,SW_SHOW); ////////////////////////////////////// // Création du dialogue principal // ////////////////////////////////////// Hwnd_Dialogue_Principal=CreateDialog(Hinstance,MAKEINTRESOURCE(DIALOGUE_PRINCIPAL),Hwnd_Fenetre_Principale,(DLGPROC)Gestionnaire_des_messages_Dialogue_Principal); ShowWindow(Hwnd_Dialogue_Principal,SW_SHOW); Initialisation_OpenGL(); UpdateWindow(Hwnd_Fenetre_Principale); ShowWindow(Hwnd_Fenetre_Principale,CmdShow);
while (GetMessageA(&Message,NULL,0,0)) { TranslateMessage(&Message); DispatchMessage(&Message); if ( Message.message == WM_PAINT || Message.message == WM_NCMOUSELEAVE // tout plein de tests sur la valeur Message.message // || Message.message == WM_SHOWWINDOW || Message.message == 0x216 //|| Message.message == WM_TIMER ) { ///////////////////////// // Et SI on peignait à partir d'ici?????? ///////////////////////// Hdc_Dialogue = BeginPaint(Hwnd_Dialogue_Principal, &ps); DrawStateA(Hdc_Dialogue, NULL, NULL, (long)Image_de_fond, NULL, 0, 0, 0, 0, DST_BITMAP); DessineOpenGl(); // Et SI on peignait 2 fois le fond? DrawStateA(Hdc_Dialogue, NULL, NULL, (long)Image_de_fond, NULL, 0, 0, 0, 0, DST_BITMAP); EndPaint(Hwnd_Dialogue_Principal, &ps); } }
///////////////////////// // Et SI on peignait à partir d'ici?????? ///////////////////////// Hdc_Dialogue = BeginPaint(Hwnd_Dialogue_Principal, &ps); DrawStateA(Hdc_Dialogue, NULL, NULL, (long)Image_de_fond, NULL, 0, 0, 0, 0, DST_BITMAP); DessineOpenGl(); // c'est ma fonction qui regroupe les instructions OpenGl! // Et SI on peignait 2 fois le fond? DrawStateA(Hdc_Dialogue, NULL, NULL, (long)Image_de_fond, NULL, 0, 0, 0, 0, DST_BITMAP); EndPaint(Hwnd_Dialogue_Principal, &ps);
void DessineOpenGl() // !!!! uniquement l'OpenGl !!!!!! // { wglMakeCurrent(Hdc_OpenGL, Hrc); // Pour que tous les ordres opengl s'appliquent à cette fenêtre Efface_Fenetre_OpenGL(); // pas d'opérations sur les DC's Projections_OpenGL(); // pas d'opérations sur les DC's Eclairage_OpenGL(); // pas d'opérations sur les DC's Scene_OpenGL(); // pas d'opérations sur les DC's glFlush(); SwapBuffers(Hdc_OpenGL); };
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question