Problem z WinApi i OpenGl

Odpowiedz Nowy wątek
2006-01-08 11:22

Rejestracja: 15 lat temu

Ostatnio: 12 lat temu

0

Mógłby mi ktoś powiedzięć dlaczego podczas przechodzenie z "menu" do gry uruchami się funkcja uruchamiająca tryb opengl ale nie moge niczym sterowac - zero kontaktu z klawiatura :P

#include <windows.h>
#include "okno.h"
#include "plansza.h"
#include <Gl/glu.h>
#include <GL/gl.h>
#include <math.h>
#include "save.h"

HWND hwnd,button,button2,button3,button4;
MSG msg;
WNDCLASS wnd;
HGLRC hrc;
HDC hdc;
plansza nowa;
obsluga_save save;
float tmp;
bool klawisze[256];
okno WinOkno;
bool stan[2]; // 1 - menu 2 - gra

LRESULT CALLBACK ProcOkno(HWND hwnd, UINT wiadomosc, WPARAM wparam,LPARAM lparam);
BOOL UtworzOkno(HINSTANCE hinstance,HWND *hwnd);

//====================================================

int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hprevinstance,LPSTR args,int nargs)
{
    nowa.przygotuj();
    stan[0]=TRUE;
    if(!WinOkno.UtworzOkno(hinstance,&hwnd)) return FALSE;
    ShowWindow(hwnd,nargs);
    UpdateWindow(hwnd);

        button=CreateWindowEx(0,"BUTTON","  Rozpocznij Gre  ",WS_CHILD|WS_VISIBLE, 400,190,200,25,hwnd,(HMENU)1,NULL,0); 
        button2=CreateWindowEx(0,"BUTTON","  Odczytaj  ",WS_CHILD|WS_VISIBLE, 400,250,200,25,hwnd,(HMENU)2,NULL,0); 
        button3=CreateWindowEx(0,"BUTTON","  Sterowanie  ",WS_CHILD|WS_VISIBLE, 400,310,200,25,hwnd,(HMENU)3,NULL,0); 
        button4=CreateWindowEx(0,"BUTTON","  Koniec  ",WS_CHILD|WS_VISIBLE, 400,370,200,25,hwnd,(HMENU)4,NULL,0); 

    while(msg.message!=WM_QUIT)
    {
    if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) 
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    else
    {
        if(stan[1]==TRUE)
        {
            glMatrixMode(GL_PROJECTION);                    
            glLoadIdentity();
            gluPerspective(45.0f,(GLfloat)1024/(GLfloat)768,0.1f,100.0f);
            glMatrixMode(GL_MODELVIEW);                     
            glLoadIdentity();   
            glClearDepth(1.0);
            glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);  
            glEnable(GL_TEXTURE_2D);
            glEnable(GL_DEPTH_TEST);
            glBlendFunc(GL_SRC_ALPHA,GL_ONE);
            glDepthFunc(GL_LESS);
            glColor3f(1,1,1);

            nowa.wyswietl(hdc);

            nowa.sprawdzaj();   
            if(nowa.suma()) 
            {
                MessageBox(NULL,"KONIEC GRY \nUDALO CI SIE ZEBRAC WSZYSTKIE KRYSZTALY","INFORMACJA",MB_OK); 
                PostQuitMessage(0);
            }
        }
        else
        {
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
            glLoadIdentity();
            glColor3f(0,0,0);
            glBegin(GL_QUADS);
                glVertex3f(-1,1,0);glVertex3f(1,1,0);
                glVertex3f(1,-1,0);glVertex3f(-1,-1,0);
            glEnd();
            glFlush();
            SwapBuffers(hdc);
        }
    }
    }
    return msg.wParam;
}

//====================================================

LRESULT CALLBACK ProcOkno(HWND hwnd, UINT wiadomosc, WPARAM wparam,LPARAM lparam)
{
if(klawisze[VK_ESCAPE])
{
    WinOkno.wylaczopengl(hwnd,hdc,hrc);
    PostQuitMessage(0);
}

if(klawisze[VK_RIGHT])
{
    stan[1]=TRUE;
}

switch(wparam)
{
    case VK_F2:
        save.zapisz(&nowa);
    break;
    case VK_F3:
        save.odczytaj(&nowa);
    break;
}

switch(wiadomosc)
{
    case WM_CREATE:
        sndPlaySound("Wav/2.wav",SND_FILENAME | SND_ASYNC);
        break;
    case WM_DESTROY:
        if(stan[1]==TRUE) WinOkno.wylaczopengl(hwnd,hdc,hrc);
        PostQuitMessage(0);
        break;
    case WM_KEYUP:
        nowa.obrot2=0; 
        nowa.obrot3=0;
        klawisze[wparam]=FALSE;     
        break;
    case WM_KEYDOWN:                        
        klawisze[wparam]=TRUE;
        break;
    case WM_COMMAND:
        if(wparam==1) {
            stan[0]=FALSE; 
            stan[1]=TRUE; 
            WinOkno.wlaczopengl(hwnd,&hdc,&hrc);
        }
        if(wparam==4) PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hwnd,wiadomosc,wparam,lparam);
}
    return 0;
}

jak ktoś zdoła mi w tym pomóc to z góry wielkie DZIĘKI :)

Pozostało 580 znaków

2006-01-08 17:22

Rejestracja: 15 lat temu

Ostatnio: 12 lat temu

0

oki.. problem rozwiazany ... wystarczylo wstawić SetFocus(hwnd); :D

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0