Esempio n. 1
0
//-----------------------------------------------------------------------------
bool Init()
{
    try
    {
        InitGL();

        CGE_LoadLibrary();
        CGE_Open(0);
        CGE_Resize(g_windowWidth, g_windowHeight);
        CGE_SetLibraryCallbackProc(OpenGlLibraryCallback);
        CGE_SetUserInterface(true, 96);
        //CGE_LoadSceneFromFile("c:\\projects\\humanoid_stand.wrl");
        ShowOpenFileDialog();
        return true;
    }
    catch (const std::exception &e)
    {
        std::ostringstream msg;

        msg << "Application initialization failed!" << std::endl << std::endl;
        msg << e.what();

        MessageBox(g_hWnd, msg.str().c_str(), "Error", MB_ICONERROR);
        return false;
    }
}
Esempio n. 2
0
//-----------------------------------------------------------------------------
void ToggleFullScreen()
{
    static DWORD savedExStyle;
    static DWORD savedStyle;
    static RECT rcSaved;

    g_isFullScreen = !g_isFullScreen;

    if (g_isFullScreen)
    {
        // Moving to full screen mode.
        savedExStyle = GetWindowLong(g_hWnd, GWL_EXSTYLE);
        savedStyle = GetWindowLong(g_hWnd, GWL_STYLE);
        GetWindowRect(g_hWnd, &rcSaved);

        SetWindowLong(g_hWnd, GWL_EXSTYLE, 0);
        SetWindowLong(g_hWnd, GWL_STYLE, WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS);
        SetWindowPos(g_hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED | SWP_SHOWWINDOW);

        g_windowWidth = GetSystemMetrics(SM_CXSCREEN);
        g_windowHeight = GetSystemMetrics(SM_CYSCREEN);

        SetWindowPos(g_hWnd, HWND_TOPMOST, 0, 0, g_windowWidth, g_windowHeight, SWP_SHOWWINDOW);
    }
    else
    {
        // Moving back to windowed mode.
        SetWindowLong(g_hWnd, GWL_EXSTYLE, savedExStyle);
        SetWindowLong(g_hWnd, GWL_STYLE, savedStyle);
        SetWindowPos(g_hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED | SWP_SHOWWINDOW);

        g_windowWidth = rcSaved.right - rcSaved.left;
        g_windowHeight = rcSaved.bottom - rcSaved.top;

        SetWindowPos(g_hWnd, HWND_NOTOPMOST, rcSaved.left, rcSaved.top, g_windowWidth, g_windowHeight, SWP_SHOWWINDOW);
    }
    CGE_Resize(g_windowWidth, g_windowHeight);
}
Esempio n. 3
0
//-----------------------------------------------------------------------------
LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
    case WM_ACTIVATE:
        switch (wParam)
        {
        default:
            break;

        case WA_ACTIVE:
        case WA_CLICKACTIVE:
            g_hasFocus = true;
            break;

        case WA_INACTIVE:
            if (g_isFullScreen)
                ShowWindow(hWnd, SW_MINIMIZE);
            g_hasFocus = false;
            break;
        }
        break;

    case WM_ERASEBKGND:
        if (IsWindowEnabled(hWnd))
        {
            wglMakeCurrent(g_hDC, g_hRC);
            CGE_Render();			// do not draw in WM_PAINT (inspired in CastleWindow)
            SwapBuffers(g_hDC);
        }
        return TRUE;

    case WM_LBUTTONDOWN:
    case WM_RBUTTONDOWN:
        CGE_MouseDown(GET_X_LPARAM(lParam), g_windowHeight-1-GET_Y_LPARAM(lParam), msg==WM_LBUTTONDOWN, 0);
        SetCapture(hWnd);
        break;

    case WM_MOUSEMOVE:
        CGE_Motion(GET_X_LPARAM(lParam), g_windowHeight-1-GET_Y_LPARAM(lParam), 0);
        break;

    case WM_LBUTTONUP:
    case WM_RBUTTONUP:
        CGE_MouseUp(GET_X_LPARAM(lParam), g_windowHeight-1-GET_Y_LPARAM(lParam),
            msg==WM_LBUTTONUP, 0, true);
        if (GetCapture()==hWnd)
            ReleaseCapture();
        break;

    case WM_MOUSEWHEEL:
        CGE_MouseWheel(GET_WHEEL_DELTA_WPARAM(wParam), true);
        break;

    case WM_CHAR:
        switch (wParam)
        {
        case VK_ESCAPE:
            PostMessage(hWnd, WM_CLOSE, 0, 0);
            break;

        case 's':
            CGE_SaveScreenshotToFile("screenshot.jpg");
            break;

        case 'f':
            CGE_SetNavigationType(ecgenavFly);
            break;

        case 'e':
            {
                int nVal = CGE_GetVariableInt(ecgevarEffectSSAO);
                if (nVal < 0) nVal = 0;
                CGE_SetVariableInt(ecgevarEffectSSAO, 1-nVal);
            }
            break;

        case 'h':
            {
                int nVal = CGE_GetVariableInt(ecgevarWalkHeadBobbing);
                if (nVal < 0) nVal = 0;
                CGE_SetVariableInt(ecgevarWalkHeadBobbing, 1-nVal);
            }
            break;

        default:
            break;
        }
        break;

    case WM_KEYDOWN:
        switch (wParam)
        {
        case VK_PRIOR:      // PageUp - move to previous viewpoint
            if (g_nViewpointCount > 0)
            {
                if (g_nCurrentViewpoint > 0)
                    g_nCurrentViewpoint--;
                else
                    g_nCurrentViewpoint = g_nViewpointCount-1;
                CGE_MoveToViewpoint(g_nCurrentViewpoint, true);
            }
            break;

        case VK_NEXT:       // PageDown - move to next viewpoint
            if (g_nViewpointCount > 0)
            {
                if (g_nCurrentViewpoint < g_nViewpointCount-1)
                    g_nCurrentViewpoint++;
                else
                    g_nCurrentViewpoint = 0;
                CGE_MoveToViewpoint(g_nCurrentViewpoint, true);
            }
            break;
        default:
            break;
        }
        break;

    case WM_DESTROY:
        Cleanup();
        PostQuitMessage(0);
        return 0;

    case WM_SIZE:
        g_windowWidth = LOWORD(lParam);
        g_windowHeight = HIWORD(lParam);
        CGE_Resize(g_windowWidth, g_windowHeight);
        break;

    case WM_SYSKEYDOWN:
        if (wParam == VK_RETURN)		// Alt + Enter
            ToggleFullScreen();
        break;

    default:
        break;
    }

    return DefWindowProc(hWnd, msg, wParam, lParam);
}