aboutsummaryrefslogtreecommitdiff
path: root/archive/hgewin/system.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'archive/hgewin/system.cpp')
-rwxr-xr-xarchive/hgewin/system.cpp884
1 files changed, 0 insertions, 884 deletions
diff --git a/archive/hgewin/system.cpp b/archive/hgewin/system.cpp
deleted file mode 100755
index 2cbd741..0000000
--- a/archive/hgewin/system.cpp
+++ /dev/null
@@ -1,884 +0,0 @@
-/*
-** Haaf's Game Engine 1.8
-** Copyright (C) 2003-2007, Relish Games
-** hge.relishgames.com
-**
-** Core system functions
-** Upgraded to DirectX9 By Chris Xiong, 2013/08/08
-*/
-
-
-#include "hge_impl.h"
-
-
-#define LOWORDINT(n) ((int)((signed short)(LOWORD(n))))
-#define HIWORDINT(n) ((int)((signed short)(HIWORD(n))))
-static const char* SYSTEM_SRC_FN="hge/system.cpp";
-
-
-const char *WINDOW_CLASS_NAME = "HGE__WNDCLASS";
-
-LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
-
-
-int nRef=0;
-HGE_Impl* pHGE=0;
-
-
-
-BOOL APIENTRY DllMain(HANDLE, DWORD, LPVOID)
-{
- return TRUE;
-}
-
-
-HGE* CALL hgeCreate(int ver)
-{
- if(ver==HGE_VERSION)
- return (HGE*)HGE_Impl::_Interface_Get();
- else
- return 0;
-}
-
-
-HGE_Impl* HGE_Impl::_Interface_Get()
-{
- if(!pHGE) pHGE=new HGE_Impl();
-
- nRef++;
-
- return pHGE;
-}
-
-
-void CALL HGE_Impl::Release()
-{
- nRef--;
-
- if(!nRef)
- {
- if(pHGE->hwnd) pHGE->System_Shutdown();
- Resource_RemoveAllPacks();
- delete pHGE;
- pHGE=0;
- }
-}
-
-
-bool CALL HGE_Impl::System_Initiate()
-{
- OSVERSIONINFO os_ver;
- SYSTEMTIME tm;
- MEMORYSTATUS mem_st;
- WNDCLASS winclass;
- int width, height;
-
- // Log system info
-
- System_Log("%s: HGE Started...",SYSTEM_SRC_FN);
-
- System_Log("%s: hge version: %X.%X", SYSTEM_SRC_FN, HGE_VERSION>>8, HGE_VERSION & 0xFF);
- GetLocalTime(&tm);
- System_Log("%s: Date: %02d.%02d.%d, %02d:%02d:%02d\n", SYSTEM_SRC_FN, tm.wDay, tm.wMonth, tm.wYear, tm.wHour, tm.wMinute, tm.wSecond);
-
- System_Log("%s: Application: %s", SYSTEM_SRC_FN, szWinTitle);
- os_ver.dwOSVersionInfoSize=sizeof(os_ver);
- GetVersionEx(&os_ver);
- System_Log("%s: OS: Windows %ld.%ld.%ld", SYSTEM_SRC_FN, os_ver.dwMajorVersion,os_ver.dwMinorVersion,os_ver.dwBuildNumber);
-
- GlobalMemoryStatus(&mem_st);
- System_Log("%s: Memory: %ldK total, %ldK free\n", SYSTEM_SRC_FN, mem_st.dwTotalPhys/1024L,mem_st.dwAvailPhys/1024L);
-
-
- // Register window class
-
- winclass.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
- winclass.lpfnWndProc = WindowProc;
- winclass.cbClsExtra = 0;
- winclass.cbWndExtra = 0;
- winclass.hInstance = hInstance;
- winclass.hCursor = LoadCursor(NULL, IDC_ARROW);
- winclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
- winclass.lpszMenuName = NULL;
- winclass.lpszClassName = WINDOW_CLASS_NAME;
- if(szIcon) winclass.hIcon = LoadIcon(hInstance, szIcon);
- else winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
-
- if (!RegisterClass(&winclass)) {
- _PostError("Can't register window class");
- return false;
- }
-
- // Create window
-
- width=nScreenWidth + GetSystemMetrics(SM_CXFIXEDFRAME)*2;
- height=nScreenHeight + GetSystemMetrics(SM_CYFIXEDFRAME)*2 + GetSystemMetrics(SM_CYCAPTION);
-
- rectW.left=(GetSystemMetrics(SM_CXSCREEN)-width)/2;
- rectW.top=(GetSystemMetrics(SM_CYSCREEN)-height)/2;
- rectW.right=rectW.left+width;
- rectW.bottom=rectW.top+height;
- styleW=WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_VISIBLE; //WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX;
-
- rectFS.left=0;
- rectFS.top=0;
- rectFS.right=nScreenWidth;
- rectFS.bottom=nScreenHeight;
- styleFS=WS_POPUP|WS_VISIBLE; //WS_POPUP
-
- if(hwndParent)
- {
- rectW.left=0;
- rectW.top=0;
- rectW.right=nScreenWidth;
- rectW.bottom=nScreenHeight;
- styleW=WS_CHILD|WS_VISIBLE;
- bWindowed=true;
- }
-
- if(bWindowed)
- hwnd = CreateWindowEx(0, WINDOW_CLASS_NAME, szWinTitle, styleW,
- rectW.left, rectW.top, rectW.right-rectW.left, rectW.bottom-rectW.top,
- hwndParent, NULL, hInstance, NULL);
- else
- hwnd = CreateWindowEx(WS_EX_TOPMOST, WINDOW_CLASS_NAME, szWinTitle, styleFS,
- 0, 0, 0, 0,
- NULL, NULL, hInstance, NULL);
- if (!hwnd)
- {
- _PostError("Can't create window");
- return false;
- }
-
- ShowWindow(hwnd, SW_SHOW);
-
- // Init subsystems
-
- timeBeginPeriod(1);
- Random_Seed();
- //_InitPowerStatus();
- _InputInit();
- if(!_GfxInit()) { System_Shutdown(); return false; }
- if(!_SoundInit()) { System_Shutdown(); return false; }
-
- System_Log("%s: Init done.\n",SYSTEM_SRC_FN);
-
- fTime=0.0f;
- t0=t0fps=timeGetTime();
- dt=cfps=0;
- nFPS=0;
- nFPSf=0.0f;
- Fcnt=0;
- fUpdateFPSDelay=0.0f;
-
- // Show splash
-
-#ifdef DEMO
-
- bool (*func)();
- bool (*rfunc)();
- HWND hwndTmp;
-
- if(pHGE->bDMO)
- {
- Sleep(200);
- func=(bool(*)())pHGE->System_GetStateFunc(HGE_FRAMEFUNC);
- rfunc=(bool(*)())pHGE->System_GetStateFunc(HGE_RENDERFUNC);
- hwndTmp=hwndParent; hwndParent=0;
- pHGE->System_SetStateFunc(HGE_FRAMEFUNC, DFrame);
- pHGE->System_SetStateFunc(HGE_RENDERFUNC, 0);
- DInit();
- pHGE->System_Start();
- DDone();
- hwndParent=hwndTmp;
- pHGE->System_SetStateFunc(HGE_FRAMEFUNC, func);
- pHGE->System_SetStateFunc(HGE_RENDERFUNC, rfunc);
- }
-
-#endif
-
- // Done
-
- return true;
-}
-
-void CALL HGE_Impl::System_Shutdown()
-{
- System_Log("\n%s: Closing session..",SYSTEM_SRC_FN);
-
- timeEndPeriod(1);
- if(hSearch) { FindClose(hSearch); hSearch=0; }
- _ClearQueue();
- _SoundDone();
- _GfxDone();
- //_DonePowerStatus();
-
- if(hwnd)
- {
- //ShowWindow(hwnd, SW_HIDE);
- //SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_TOOLWINDOW);
- //ShowWindow(hwnd, SW_SHOW);
- DestroyWindow(hwnd);
- hwnd=0;
- }
-
- if(hInstance) UnregisterClass(WINDOW_CLASS_NAME, hInstance);
-
- System_Log("%s: Session ended.",SYSTEM_SRC_FN);
-}
-
-
-bool CALL HGE_Impl::System_Start()
-{
- MSG msg;
-
- if(!hwnd)
- {
- _PostError("System_Start: System_Initiate wasn't called");
- return false;
- }
-
- if(!procFrameFunc) {
- _PostError("System_Start: No frame function defined");
- return false;
- }
-
- bActive=true;
-
- // MAIN LOOP
-
- for(;;)
- {
-
- // Process window messages if not in "child mode"
- // (if in "child mode" the parent application will do this for us)
-
- if(!hwndParent)
- {
- if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
- {
- if (msg.message == WM_QUIT) break;
- // TranslateMessage(&msg);
- DispatchMessage(&msg);
- continue;
- }
- }
-
- // Check if mouse is over HGE window for Input_IsMouseOver
-
- _UpdateMouse();
-
- // If HGE window is focused or we have the "don't suspend" state - process the main loop
-
- if(bActive || bDontSuspend)
- {
- // Ensure we have at least 1ms time step
- // to not confuse user's code with 0
-
- do { dt=timeGetTime() - t0; } while(dt < 1);
-
- // If we reached the time for the next frame
- // or we just run in unlimited FPS mode, then
- // do the stuff
-
- if(dt >= nFixedDelta)
- {
- // fDeltaTime = time step in seconds returned by Timer_GetDelta
-
- fDeltaTime=dt/1000.0f;
-
- // Cap too large time steps usually caused by lost focus to avoid jerks
-
- if(fDeltaTime > 0.2f)
- {
- fDeltaTime = nFixedDelta ? nFixedDelta/1000.0f : 0.01f;
- }
-
- // Update time counter returned Timer_GetTime
-
- fTime += fDeltaTime;
-
- // Store current time for the next frame
- // and count FPS
-
- t0=timeGetTime();
- if(t0-t0fps <= 1000) cfps++;
- else
- {
- nFPS=cfps; cfps=0; t0fps=t0;
- _UpdatePowerStatus();
- }
- ++Fcnt;fUpdateFPSDelay+=fDeltaTime;
- if(fUpdateFPSDelay>1)
- {
- nFPSf=Fcnt/fUpdateFPSDelay;
- fUpdateFPSDelay=0.0f;
- Fcnt=0;
- }
- // Do user's stuff
-
- if(procFrameFunc()) break;
- if(procRenderFunc) procRenderFunc();
-
- // If if "child mode" - return after processing single frame
-
- if(hwndParent) break;
-
- // Clean up input events that were generated by
- // WindowProc and weren't handled by user's code
- for (int i=1;i<=255;++i)
- keylast[i]=Input_GetKeyState(i);
- _ClearQueue();
-
- // If we use VSYNC - we could afford a little
- // sleep to lower CPU usage
-
- // if(!bWindowed && nHGEFPS==HGEFPS_VSYNC) Sleep(1);
- }
-
- // If we have a fixed frame rate and the time
- // for the next frame isn't too close, sleep a bit
-
- else
- {
- if(nFixedDelta && dt+3 < nFixedDelta) Sleep(1);
- }
- }
-
- // If main loop is suspended - just sleep a bit
- // (though not too much to allow instant window
- // redraw if requested by OS)
-
- else Sleep(1);
- }
-
- _ClearQueue();
-
- bActive=false;
-
- return true;
-}
-
-void CALL HGE_Impl::System_SetStateBool(hgeBoolState state, bool value)
-{
- switch(state)
- {
- case HGE_WINDOWED: if(VertArray || hwndParent) break;
- if(pD3DDevice && bWindowed != value)
- {
- if(d3dppW.BackBufferFormat==D3DFMT_UNKNOWN || d3dppFS.BackBufferFormat==D3DFMT_UNKNOWN) break;
-
- if(bWindowed) GetWindowRect(hwnd, &rectW);
- bWindowed=value;
- if(bWindowed) d3dpp=&d3dppW;
- else d3dpp=&d3dppFS;
-
- if(_format_id(d3dpp->BackBufferFormat) < 4) nScreenBPP=16;
- else nScreenBPP=32;
-
- _GfxRestore();
- _AdjustWindow();
- }
- else bWindowed=value;
- break;
-
- case HGE_ZBUFFER: if(!pD3DDevice) bZBuffer=value;
- break;
-
- case HGE_TEXTUREFILTER: bTextureFilter=value;
- if(pD3DDevice)
- {
- _render_batch();
- if(bTextureFilter)
- {
- pD3DDevice->SetSamplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_LINEAR);
- pD3DDevice->SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_LINEAR);
- }
- else
- {
- pD3DDevice->SetSamplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_POINT);
- pD3DDevice->SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_POINT);
- }
- }
- break;
-
- case HGE_USESOUND: if(bUseSound!=value)
- {
- bUseSound=value;
- if(bUseSound && hwnd) _SoundInit();
- if(!bUseSound && hwnd) _SoundDone();
- }
- break;
-
- case HGE_HIDEMOUSE: bHideMouse=value; break;
-
- case HGE_DONTSUSPEND: bDontSuspend=value; break;
-
- #ifdef DEMO
- case HGE_SHOWSPLASH: bDMO=value; break;
- #endif
- }
-}
-
-void CALL HGE_Impl::System_SetStateFunc(hgeFuncState state, hgeCallback value)
-{
- switch(state)
- {
- case HGE_FRAMEFUNC: procFrameFunc=value; break;
- case HGE_RENDERFUNC: procRenderFunc=value; break;
- case HGE_FOCUSLOSTFUNC: procFocusLostFunc=value; break;
- case HGE_FOCUSGAINFUNC: procFocusGainFunc=value; break;
- case HGE_GFXRESTOREFUNC: procGfxRestoreFunc=value; break;
- case HGE_EXITFUNC: procExitFunc=value; break;
- }
-}
-
-void CALL HGE_Impl::System_SetStateHwnd(hgeHwndState state, HWND value)
-{
- switch(state)
- {
- case HGE_HWNDPARENT: if(!hwnd) hwndParent=value; break;
- }
-}
-
-void CALL HGE_Impl::System_SetStateInt(hgeIntState state, int value)
-{
- switch(state)
- {
- case HGE_SCREENWIDTH: if(!pD3DDevice) nScreenWidth=value; break;
-
- case HGE_SCREENHEIGHT: if(!pD3DDevice) nScreenHeight=value; break;
-
- case HGE_SCREENBPP: if(!pD3DDevice) nScreenBPP=value; break;
-
- case HGE_SAMPLERATE: if(!hOpenAL) nSampleRate=value;
- break;
-
- case HGE_FXVOLUME: nFXVolume=value;
- _SetFXVolume(nFXVolume);
- break;
-
- case HGE_MUSVOLUME: nMusVolume=value;
- _SetMusVolume(nMusVolume);
- break;
-
- case HGE_STREAMVOLUME: nStreamVolume=value;
- _SetStreamVolume(nStreamVolume);
- break;
-
- case HGE_FPS: if(VertArray) break;
-
- if(pD3DDevice)
- {
- if((nHGEFPS>=0 && value <0) || (nHGEFPS<0 && value>=0))
- {
- if(value==HGEFPS_VSYNC)
- {
- d3dppW.SwapEffect = D3DSWAPEFFECT_COPY;
- d3dppW.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;
- d3dppFS.PresentationInterval = D3DPRESENT_INTERVAL_ONE;
- }
- else
- {
- d3dppW.SwapEffect = D3DSWAPEFFECT_COPY;
- d3dppFS.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
- }
- //if(procFocusLostFunc) procFocusLostFunc();
- _GfxRestore();
- //if(procFocusGainFunc) procFocusGainFunc();
- }
- }
- nHGEFPS=value;
- if(nHGEFPS>0) nFixedDelta=int(1000.0f/value);
- else nFixedDelta=0;
- break;
- }
-}
-
-void CALL HGE_Impl::System_SetStateString(hgeStringState state, const char *value)
-{
- FILE *hf;
-
- switch(state)
- {
- case HGE_ICON: szIcon=value;
- if(pHGE->hwnd) SetClassLong(pHGE->hwnd, GCL_HICON, (LONG)LoadIcon(pHGE->hInstance, szIcon));
- break;
- case HGE_TITLE: strcpy(szWinTitle,value);
- if(pHGE->hwnd) SetWindowText(pHGE->hwnd, szWinTitle);
- break;
- case HGE_INIFILE: if(value) strcpy(szIniFile,Resource_MakePath(value));
- else szIniFile[0]=0;
- break;
- case HGE_LOGFILE: if(value)
- {
- strcpy(szLogFile,Resource_MakePath(value));
- hf=fopen(szLogFile, "w");
- if(!hf) szLogFile[0]=0;
- else fclose(hf);
- }
- else szLogFile[0]=0;
- break;
- }
-}
-
-bool CALL HGE_Impl::System_GetStateBool(hgeBoolState state)
-{
- switch(state)
- {
- case HGE_WINDOWED: return bWindowed;
- case HGE_ZBUFFER: return bZBuffer;
- case HGE_TEXTUREFILTER: return bTextureFilter;
- case HGE_USESOUND: return bUseSound;
- case HGE_DONTSUSPEND: return bDontSuspend;
- case HGE_HIDEMOUSE: return bHideMouse;
-
- #ifdef DEMO
- case HGE_SHOWSPLASH: return bDMO;
- #endif
- }
-
- return false;
-}
-
-hgeCallback CALL HGE_Impl::System_GetStateFunc(hgeFuncState state)
-{
- switch(state)
- {
- case HGE_FRAMEFUNC: return procFrameFunc;
- case HGE_RENDERFUNC: return procRenderFunc;
- case HGE_FOCUSLOSTFUNC: return procFocusLostFunc;
- case HGE_FOCUSGAINFUNC: return procFocusGainFunc;
- case HGE_EXITFUNC: return procExitFunc;
- }
-
- return NULL;
-}
-
-HWND CALL HGE_Impl::System_GetStateHwnd(hgeHwndState state)
-{
- switch(state)
- {
- case HGE_HWND: return hwnd;
- case HGE_HWNDPARENT: return hwndParent;
- }
-
- return 0;
-}
-
-int CALL HGE_Impl::System_GetStateInt(hgeIntState state)
-{
- switch(state)
- {
- case HGE_SCREENWIDTH: return nScreenWidth;
- case HGE_SCREENHEIGHT: return nScreenHeight;
- case HGE_SCREENBPP: return nScreenBPP;
- case HGE_SAMPLERATE: return nSampleRate;
- case HGE_FXVOLUME: return nFXVolume;
- case HGE_MUSVOLUME: return nMusVolume;
- case HGE_STREAMVOLUME: return nStreamVolume;
- case HGE_FPS: return nHGEFPS;
- case HGE_POWERSTATUS: return nPowerStatus;
- }
-
- return 0;
-}
-
-const char* CALL HGE_Impl::System_GetStateString(hgeStringState state) {
- switch(state) {
- case HGE_ICON: return szIcon;
- case HGE_TITLE: return szWinTitle;
- case HGE_INIFILE: if(szIniFile[0]) return szIniFile;
- else return 0;
- case HGE_LOGFILE: if(szLogFile[0]) return szLogFile;
- else return 0;
- }
-
- return NULL;
-}
-
-const char* CALL HGE_Impl::System_GetErrorMessage()
-{
- return szError;
-}
-
-void CALL HGE_Impl::System_Log(const char *szFormat, ...)
-{
- FILE *hf = NULL;
- va_list ap;
-
- if(!szLogFile[0]) return;
-
- hf = fopen(szLogFile, "a");
- if(!hf) return;
-
- va_start(ap, szFormat);
- vfprintf(hf, szFormat, ap);
- va_end(ap);
- va_start(ap, szFormat);
- vfprintf(stderr, szFormat, ap);
- va_end(ap);
- fprintf(hf, "\n");
- fprintf(stderr, "\n");
-
- fclose(hf);
-}
-
-bool CALL HGE_Impl::System_Launch(const char *url)
-{
- if((DWORD)ShellExecute(pHGE->hwnd, NULL, url, NULL, NULL, SW_SHOWMAXIMIZED)>32) return true;
- else return false;
-}
-
-void CALL HGE_Impl::System_Snapshot(const char *filename)
-{
- LPDIRECT3DSURFACE9 pSurf;
- char *shotname, tempname[_MAX_PATH];
- int i;
-
- if(!filename)
- {
- i=0;
- shotname=Resource_EnumFiles("shot???.bmp");
- while(shotname)
- {
- i++;
- shotname=Resource_EnumFiles();
- }
- sprintf(tempname, "shot%03d.bmp", i);
- filename=Resource_MakePath(tempname);
- }
-
- if(pD3DDevice)
- {
- pD3DDevice->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &pSurf);
- D3DXSaveSurfaceToFile(filename, D3DXIFF_BMP, pSurf, NULL, NULL);
- pSurf->Release();
- }
-}
-
-//////// Implementation ////////
-
-
-HGE_Impl::HGE_Impl()
-{
- hInstance=GetModuleHandle(0);
- hwnd=0;
- bActive=false;
- szError[0]=0;
-
- pD3D=0;
- pD3DDevice=0;
- d3dpp=0;
- pTargets=0;
- pCurTarget=0;
- pScreenSurf=0;
- pScreenDepth=0;
- pVB=0;
- pIB=0;
- VertArray=0;
- textures=0;
-
- hOpenAL=0;
- bSilent=false;
- streams=0;
-
- hSearch=0;
- res=0;
-
- queue=0;
- Char=VKey=Zpos=0;
- Xpos=Ypos=0.0f;
- bMouseOver=false;
- bCaptured=false;
-
- nHGEFPS=HGEFPS_UNLIMITED;
- fTime=0.0f;
- fUpdateFPSDelay=0.0f;
- fDeltaTime=0.0f;
- nFPS=0;
- nFPSf=0.0f;
- Fcnt=0;
-
- procFrameFunc=0;
- procRenderFunc=0;
- procFocusLostFunc=0;
- procFocusGainFunc=0;
- procGfxRestoreFunc=0;
- procExitFunc=0;
- szIcon=0;
- strcpy(szWinTitle,"HGE");
- nScreenWidth=800;
- nScreenHeight=600;
- nScreenBPP=32;
- bWindowed=false;
- bZBuffer=false;
- bTextureFilter=true;
- szLogFile[0]=0;
- szIniFile[0]=0;
- bUseSound=true;
- nSampleRate=44100;
- nFXVolume=100;
- nMusVolume=100;
- nStreamVolume=100;
- nFixedDelta=0;
- bHideMouse=true;
- bDontSuspend=false;
- hwndParent=0;
-
- nPowerStatus=HGEPWR_UNSUPPORTED;
- hKrnl32 = NULL;
- lpfnGetSystemPowerStatus = NULL;
-
-#ifdef DEMO
- bDMO=true;
-#endif
-
-
- GetModuleFileName(GetModuleHandle(NULL), szAppPath, sizeof(szAppPath));
- int i;
- for(i=strlen(szAppPath)-1; i>0; i--) if(szAppPath[i]=='\\') break;
- szAppPath[i+1]=0;
-}
-
-void HGE_Impl::_PostError(const char *error)
-{
- System_Log(error);
- strcpy(szError,error);
-}
-
-void HGE_Impl::_FocusChange(bool bAct)
-{
- bActive=bAct;
-
- if(bActive)
- {
- if(procFocusGainFunc) procFocusGainFunc();
- }
- else
- {
- if(procFocusLostFunc) procFocusLostFunc();
- }
-}
-
-LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
-{
- bool bActivating;
-
- switch(msg)
- {
- case WM_CREATE:
- return FALSE;
-
- case WM_PAINT:
- if(pHGE->pD3D && pHGE->procRenderFunc && pHGE->bWindowed) pHGE->procRenderFunc();
- break;
-
- case WM_DESTROY:
- PostQuitMessage(0);
- return FALSE;
-
-/*
- case WM_ACTIVATEAPP:
- bActivating = (wparam == TRUE);
- if(pHGE->pD3D && pHGE->bActive != bActivating) pHGE->_FocusChange(bActivating);
- return FALSE;
-*/
- case WM_ACTIVATE:
- // tricky: we should catch WA_ACTIVE and WA_CLICKACTIVE,
- // but only if HIWORD(wParam) (fMinimized) == FALSE (0)
- bActivating = (LOWORD(wparam) != WA_INACTIVE) && (HIWORD(wparam) == 0);
- if(pHGE->pD3D && pHGE->bActive != bActivating) pHGE->_FocusChange(bActivating);
- return FALSE;
-
-
- case WM_SETCURSOR:
- if(pHGE->bActive && LOWORD(lparam)==HTCLIENT && pHGE->bHideMouse) SetCursor(NULL);
- else SetCursor(LoadCursor(NULL, IDC_ARROW));
- return FALSE;
-
- case WM_SYSKEYDOWN:
- if(wparam == VK_F4)
- {
- if(pHGE->procExitFunc && !pHGE->procExitFunc()) return FALSE;
- return DefWindowProc(hwnd, msg, wparam, lparam);
- }
- else if(wparam == VK_RETURN)
- {
- pHGE->System_SetState(HGE_WINDOWED, !pHGE->System_GetState(HGE_WINDOWED));
- return FALSE;
- }
- else
- {
- pHGE->_BuildEvent(INPUT_KEYDOWN, wparam, HIWORD(lparam) & 0xFF, (lparam & 0x40000000) ? HGEINP_REPEAT:0, -1, -1);
- return FALSE;
- }
-
- case WM_KEYDOWN:
- pHGE->_BuildEvent(INPUT_KEYDOWN, wparam, HIWORD(lparam) & 0xFF, (lparam & 0x40000000) ? HGEINP_REPEAT:0, -1, -1);
- return FALSE;
- case WM_SYSKEYUP:
- pHGE->_BuildEvent(INPUT_KEYUP, wparam, HIWORD(lparam) & 0xFF, 0, -1, -1);
- return FALSE;
- case WM_KEYUP:
- pHGE->_BuildEvent(INPUT_KEYUP, wparam, HIWORD(lparam) & 0xFF, 0, -1, -1);
- return FALSE;
-
- case WM_LBUTTONDOWN:
- SetFocus(hwnd);
- pHGE->_BuildEvent(INPUT_MBUTTONDOWN, HGEK_LBUTTON, 0, 0, LOWORDINT(lparam), HIWORDINT(lparam));
- return FALSE;
- case WM_MBUTTONDOWN:
- SetFocus(hwnd);
- pHGE->_BuildEvent(INPUT_MBUTTONDOWN, HGEK_MBUTTON, 0, 0, LOWORDINT(lparam), HIWORDINT(lparam));
- return FALSE;
- case WM_RBUTTONDOWN:
- SetFocus(hwnd);
- pHGE->_BuildEvent(INPUT_MBUTTONDOWN, HGEK_RBUTTON, 0, 0, LOWORDINT(lparam), HIWORDINT(lparam));
- return FALSE;
-
- case WM_LBUTTONDBLCLK:
- pHGE->_BuildEvent(INPUT_MBUTTONDOWN, HGEK_LBUTTON, 0, HGEINP_REPEAT, LOWORDINT(lparam), HIWORDINT(lparam));
- return FALSE;
- case WM_MBUTTONDBLCLK:
- pHGE->_BuildEvent(INPUT_MBUTTONDOWN, HGEK_MBUTTON, 0, HGEINP_REPEAT, LOWORDINT(lparam), HIWORDINT(lparam));
- return FALSE;
- case WM_RBUTTONDBLCLK:
- pHGE->_BuildEvent(INPUT_MBUTTONDOWN, HGEK_RBUTTON, 0, HGEINP_REPEAT, LOWORDINT(lparam), HIWORDINT(lparam));
- return FALSE;
-
- case WM_LBUTTONUP:
- pHGE->_BuildEvent(INPUT_MBUTTONUP, HGEK_LBUTTON, 0, 0, LOWORDINT(lparam), HIWORDINT(lparam));
- return FALSE;
- case WM_MBUTTONUP:
- pHGE->_BuildEvent(INPUT_MBUTTONUP, HGEK_MBUTTON, 0, 0, LOWORDINT(lparam), HIWORDINT(lparam));
- return FALSE;
- case WM_RBUTTONUP:
- pHGE->_BuildEvent(INPUT_MBUTTONUP, HGEK_RBUTTON, 0, 0, LOWORDINT(lparam), HIWORDINT(lparam));
- return FALSE;
-
- case WM_MOUSEMOVE:
- pHGE->_BuildEvent(INPUT_MOUSEMOVE, 0, 0, 0, LOWORDINT(lparam), HIWORDINT(lparam));
- return FALSE;
- case 0x020A: // WM_MOUSEWHEEL, GET_WHEEL_DELTA_WPARAM(wparam);
- pHGE->_BuildEvent(INPUT_MOUSEWHEEL, short(HIWORD(wparam))/120, 0, 0, LOWORDINT(lparam), HIWORDINT(lparam));
- return FALSE;
-
- case WM_SIZE:
- if(pHGE->pD3D && wparam==SIZE_RESTORED) pHGE->_Resize(LOWORD(lparam), HIWORD(lparam));
- //return FALSE;
- break;
-
- case WM_SYSCOMMAND:
- if(wparam==SC_CLOSE)
- {
- if(pHGE->procExitFunc && !pHGE->procExitFunc()) return FALSE;
- pHGE->bActive=false;
- return DefWindowProc(hwnd, msg, wparam, lparam);
- }
- break;
- }
-
- return DefWindowProc(hwnd, msg, wparam, lparam);
-}
-