Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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();
}