[HGE]-源码分析-14 system (c)
来源:互联网 发布:兼职 大数据 英文 翻译 编辑:程序博客网 时间:2024/04/30 08:27
剩下一点尾巴。
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);fprintf(hf, "\n");fclose(hf);}
日志写入函数,用了不定参数,用法和printf一样
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){LPDIRECT3DSURFACE8 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, D3DBACKBUFFER_TYPE_MONO, &pSurf);D3DXSaveSurfaceToFile(filename, D3DXIFF_BMP, pSurf, NULL, NULL);pSurf->Release();}}
截屏函数,会把当前屏幕截取并保存,参数是路径,为空会存在程序目录下,先是文件名生成,此外还有保存文件操作,用D3D接口获取后备缓冲然后存成BMP
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;hBass=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;fDeltaTime=0.0f;nFPS=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 DEMObDMO=true;#endifGetModuleFileName(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(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);}
对应不同的消息调用相应的函数就行
- [HGE]-源码分析-14 system (c)
- [HGE]-源码分析-12 system (a)
- [HGE]-源码分析-13system (b)
- [HGE]-源码分析-6 core里的graphics(c)
- [HGE]-源码分析-8 ini
- [HGE]-源码分析-10 resource
- [HGE]-源码分析-11 sound
- [HGE]-源码分析-5 core里的graphics(b)
- [HGE]-源码分析-7 core里的graphics(d)
- [HGE]-源码分析-1 引擎源码构成
- [HGE]-源码分析-2 一个小demo
- [HGE]-源码分析-3 Core部分
- [HGE]-源码分析-9 input,power,random
- [HGE]-源码分析-15 最后的timer
- hge源码注释 1 hge引擎的启动(1)
- hge源码注释 2 hge引擎的启动(2)
- hge源码注释 3 hge引擎的启动(3)
- [HGE]-源码分析-4 core里的demo和graphics(a)
- 【转】ArcGIS Engine ITable 与System.DataTable相互转换
- MsiQueryProductState
- UVA 10254 - The Priest Mathematician(规律)
- 2013年美国开发者薪资调查报告
- python 字符串前加r
- [HGE]-源码分析-14 system (c)
- Hibernate实现分页和综合查询详解
- C#客户端 C++服务端 乱码问题
- 五大常用算法之一:分治算法(转载)
- java虚拟机加载类顺序
- C#学习之第六天
- 领导需要比下属更懂技术吗?
- mac终端命令(苹果终端命令)
- 关于php的扩展开发