static LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { PMAIN_WND_INFO Info; LRESULT Ret = 0; static RECT wndOldPos; /* Get the window context */ Info = (PMAIN_WND_INFO)GetWindowLongPtr(hwnd, GWLP_USERDATA); if (Info == NULL && uMsg != WM_CREATE) { goto HandleDefaultMessage; } switch (uMsg) { case WM_CREATE: { Info = (PMAIN_WND_INFO)(((LPCREATESTRUCT)lParam)->lpCreateParams); /* Initialize the main window context */ Info->hSelf = hwnd; SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)Info); InitMainWnd(Info); /* Show the window */ ShowWindow(hwnd, Info->nCmdShow); /* get the windows position */ GetWindowRect(hwnd, &wndOldPos); break; } case WM_SIZE: { MainWndResize(Info, LOWORD(lParam), HIWORD(lParam)); /* NOTE - do *not* forward this message to DefFrameProc! Otherwise the MDI client will attempt to resize itself */ break; } case WM_MOVE: { } break; case WM_NOTIFY: { /* FIXME - handle other notifications */ break; } case WM_COMMAND: { MainWndCommand(Info, LOWORD(wParam), (HWND)lParam); goto HandleDefaultMessage; } case WM_MENUSELECT: { if (Info->hStatus != NULL) { if (!MainWndMenuHint(Info, LOWORD(wParam), MainMenuHintTable, sizeof(MainMenuHintTable) / sizeof(MainMenuHintTable[0]), IDS_HINT_BLANK)) { MainWndMenuHint(Info, LOWORD(wParam), SystemMenuHintTable, sizeof(SystemMenuHintTable) / sizeof(SystemMenuHintTable[0]), IDS_HINT_BLANK); } } break; } case WM_ENTERMENULOOP: { Info->InMenuLoop = TRUE; UpdateMainStatusBar(Info); break; } case WM_EXITMENULOOP: { Info->InMenuLoop = FALSE; UpdateMainStatusBar(Info); break; } case WM_CLOSE: { DestroyWindow(hwnd); break; } case WM_ENABLE: { goto HandleDefaultMessage; } case WM_NCACTIVATE: { goto HandleDefaultMessage; } case WM_ACTIVATEAPP: { goto HandleDefaultMessage; } case WM_DESTROY: { DestroyMainWnd(Info); /* FIXME: set the windows position in registry*/ //wndOldPos HeapFree(ProcessHeap, 0, Info); SetWindowLongPtr(hwnd, GWLP_USERDATA, 0); /* Break the message queue loop */ PostQuitMessage(0); break; } default: { HandleDefaultMessage: if (Info != NULL && Info->hMdiClient != NULL) { Ret = DefFrameProc(hwnd, Info->hMdiClient, uMsg, wParam, lParam); } else { Ret = DefWindowProc(hwnd, uMsg, wParam, lParam); } break; } } return Ret; }
VOID CGameProcedure::ReleaseStaticMember(VOID) { //关闭驱动函数 if(m_hEventTimer) ::timeKillEvent(m_hEventTimer); m_hEventTimer = NULL; CloseHandle(m_hTickEvent); m_hTickEvent = NULL; if ( s_pActionSetMgr != NULL ) { s_pActionSetMgr->CleanUp(); delete s_pActionSetMgr; s_pActionSetMgr = NULL; } delete s_pCampDataMgr; s_pCampDataMgr = NULL; delete s_pSkillDataMgr; s_pSkillDataMgr = NULL; delete s_pBulletDataMgr; s_pBulletDataMgr = NULL; delete s_pBuffImpactMgr; s_pBuffImpactMgr = NULL; delete s_pDirectlyImpactMgr;s_pDirectlyImpactMgr = NULL; //释放所有的循环实例 if(s_pProcLogIn) delete s_pProcLogIn; s_pProcLogIn = NULL; if(s_pProcCharSel) delete s_pProcCharSel; s_pProcCharSel = NULL; if(s_pProcCharCreate) delete s_pProcCharCreate; s_pProcCharCreate = NULL; if(s_pProcEnter) delete s_pProcEnter; s_pProcEnter = NULL; if(s_pProcMain) delete s_pProcMain; s_pProcMain = NULL; if(s_pProcChangeScene) delete s_pProcChangeScene; s_pProcChangeScene = NULL; s_pProcPrev = s_pProcActive = NULL; //关闭所有工作的节点 //19. 资源提供 SAFE_RELEASE(s_pResourceProvider); //18. 外接帮助系统 SAFE_RELEASE(s_pHelperSystem); //17. UI模型显示管理 SAFE_RELEASE(s_pFakeObjSystem); //16. 操作管理 SAFE_RELEASE( s_pActionSystem ); //15. 事件系统 SAFE_RELEASE( s_pEventSystem ); //14. 脚本系统 SAFE_RELEASE( s_pScriptSystem ); //13. 鼠标指针管理器 SAFE_RELEASE( s_pCursorMng ); //12. UI数据池 SAFE_RELEASE(s_pDataPool_); SAFE_RELEASE(s_pDataPool); //11. 接口管理器 SAFE_RELEASE( s_pGameInterface ); //10. 系统变量管理器 SAFE_RELEASE( s_pVariableSystem ); //9. 数据库管理器 SAFE_RELEASE( s_pDataBaseSystem ); //8. 世界管理器 SAFE_RELEASE( s_pWorldManager ); //7. UI管理器 SAFE_RELEASE( s_pUISystem ); //6. 物体管理器 SAFE_RELEASE( s_pObjectManager ); //5. 调试器节点 SAFE_RELEASE( s_pDebuger ); //4. 渲染器节点 SAFE_RELEASE( s_pGfxSystem ); //3. 音效管理器 SAFE_RELEASE( s_pSoundSystem ); //2. 网络管理器 SAFE_RELEASE( s_pNetManager ); //1. 计时器 SAFE_RELEASE( s_pTimeSystem ); //0. 输入管理器 SAFE_RELEASE( s_pInputSystem ); //核心关闭 g_theKernel.ShutDown(); //释放主窗口 DestroyMainWnd(); }