系统控制函数
首先是一些准备工作:
声明了一些宏,用于计数的全局变量,回调函数,dll入口,接口创建函数
#define LOWORDINT(n) ((int)((signed short)(LOWORD(n))))
#define HIWORDINT(n) ((int)((signed short)(HIWORD(n))))
const char *WINDOW_CLASS_NAME = "HGE__WNDCLASS";
LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
//HGE接口的引用数量 用了类似智能指针的操作
int nRef=0;
HGE_Impl* pHGE=0;
//这个是dll的入口函数 类似win32有个WinMain 命令行程序有个main
//dll的时 DLLMain
BOOL APIENTRY DllMain(HANDLE, DWORD, LPVOID)
{
return TRUE;
}
//创建HGE接口
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)//引用计数归0之后 say goodbye to hge
{
if(pHGE->hwnd) pHGE->System_Shutdown();
Resource_RemoveAllPacks();
delete pHGE;
pHGE=0;
}
}
HGE接口释放
//初始化操作
// 1 写日志 2 窗口创建 3 各个模块的初始化(图形,输入,声音。。)
//最后是由宏控制的入场动画显示(HGE logo)
bool CALL HGE_Impl::System_Initiate()
{
OSVERSIONINFO os_ver;
SYSTEMTIME tm;
MEMORYSTATUS mem_st;
WNDCLASS winclass;
int width, height;
// Log system info
System_Log("HGE Started..\n");
System_Log("HGE version: %X.%X", HGE_VERSION>>8, HGE_VERSION & 0xFF);
GetLocalTime(&tm);
System_Log("Date: %02d.%02d.%d, %02d:%02d:%02d\n", tm.wDay, tm.wMonth, tm.wYear, tm.wHour, tm.wMinute, tm.wSecond);
System_Log("Application: %s",szWinTitle);
os_ver.dwOSVersionInfoSize=sizeof(os_ver);
GetVersionEx(&os_ver);
System_Log("OS: Windows %ld.%ld.%ld",os_ver.dw