Esempio n. 1
0
void CHookedWindow::_KillWindow()
{
	if (!_stOldWindowProc && !_stOldRootWindowProc)
		return;

	LogWrite(InstIdx(), "**Exiting main loop**", LT_INFO, __FILE__, __LINE__);

	_pDelMessageProc->Invoke(TWinMessage(WMT_CLOSE));
	_pDelMessageProc->Invoke(TWinMessage(WMT_DESTROY));

	if (!_bNoMloopHook && !ReleaseTimer(_uiUpdateTimer))
		LOG("Can't kill update timer.", LT_ERROR);

	if(
		SetWindowLongPtr(_hWnd, GWLP_WNDPROC, (LONG_PTR)_stOldWindowProc)!=NULL &&
		(_stOldRootWindowProc == NULL || SetWindowLongPtr(_hRootHWnd, GWLP_WNDPROC, (LONG_PTR)_stOldRootWindowProc) != NULL)
		)
		LOG("Window controls message hooks unset successfully.", LT_INFO);
	else 
		LOG("Can't unset window control message hooks.", LT_ERROR);

	_stOldWindowProc = NULL;
	_stOldRootWindowProc = NULL;

	_pDelMessageProc->Invoke(TWinMessage(WMT_RELEASED));
}
Esempio n. 2
0
int CMainWindow::_wWinMain(HINSTANCE hInstance)
{
	_pEngineCore->AddToLog("**Entering main loop**");

	_bIsLooping = true;
	
	MSG st_msg = {0};

	while (_bIsLooping)
		if (PeekMessage(&st_msg, NULL, 0, 0, PM_REMOVE ))
		{
			if (WM_QUIT == st_msg.message) 
				_bIsLooping = false;
			else
			{   
				TranslateMessage(&st_msg);
				DispatchMessage (&st_msg);
			}
		}
		else
		{
	        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	        glLoadIdentity();

			_pDelMainLoop->Invoke();
	
			SwapBuffers(_hDC);
		}

	_pDelMessageProc->Invoke(TWinMessage(WMT_RELEASED));

	_pEngineCore->AddToLog("**Exiting main loop**");

	return (int) st_msg.wParam;
}
Esempio n. 3
0
TWinMessage WinAPIMsgToEngMsg(UINT Msg, WPARAM wParam, LPARAM lParam)
{
    switch (Msg)
    {
    case WM_PAINT:
        return TWinMessage(WMT_REDRAW);

    case WM_SHOWWINDOW:
        if (wParam == TRUE && lParam == 0)
            return TWinMessage(WMT_PRESENT);
        else
            return TWinMessage();

    case WM_CLOSE:
        return TWinMessage(WMT_CLOSE);

    case WM_CREATE:
        return TWinMessage(WMT_CREATE);

    case WM_DESTROY:
        return TWinMessage(WMT_DESTROY);

    case WM_SETFOCUS:
        return TWinMessage(WMT_ACTIVATED);

    case WM_KILLFOCUS:
        return TWinMessage(WMT_DEACTIVATED);

    case WM_MOVING:
        return TWinMessage(WMT_MOVE, ((RECT*)lParam)->left, ((RECT*)lParam)->top, (RECT*)lParam);

    case WM_SIZING:
        return TWinMessage(WMT_SIZE, ((RECT*)lParam)->right - ((RECT*)lParam)->left, ((RECT*)lParam)->bottom - ((RECT*)lParam)->top, (RECT*)lParam);

    case WM_SIZE:
        RECT r, rc;
        r.left = r.top = 0;
        r.right = LOWORD(lParam);
        r.bottom = HIWORD(lParam);

        if (wParam == SIZE_MINIMIZED)
            return TWinMessage(WMT_MINIMIZED, r.right, r.bottom, &r);
        else if (wParam == SIZE_RESTORED)
            return TWinMessage(WMT_RESTORED, r.right, r.bottom, &r);
        else
            return TWinMessage(WMT_SIZE, r.right, r.bottom, &r);

    case WM_KEYUP:
        return TWinMessage(WMT_KEY_UP, ASCIIKeyToEngKey((uchar)wParam));

    case WM_KEYDOWN:
        return TWinMessage(WMT_KEY_DOWN, ASCIIKeyToEngKey((uchar)wParam));

    case WM_CHAR:
        return TWinMessage(WMT_ENTER_CHAR, wParam);

    case WM_MOUSEMOVE:
        return TWinMessage(WMT_MOUSE_MOVE, LOWORD(lParam), HIWORD(lParam));

    case WM_LBUTTONDOWN:
        return TWinMessage(WMT_MOUSE_DOWN, 0);

    case WM_MBUTTONDOWN:
        return TWinMessage(WMT_MOUSE_DOWN, 3);

    case WM_RBUTTONDOWN:
        return TWinMessage(WMT_MOUSE_DOWN, 2);

    case WM_LBUTTONUP:
        return TWinMessage(WMT_MOUSE_UP, 0);

    case WM_MBUTTONUP:
        return TWinMessage(WMT_MOUSE_UP, 3);

    case WM_RBUTTONUP:
        return TWinMessage(WMT_MOUSE_UP, 2);

    case WM_MOUSEWHEEL:
        int delta;
        delta = GET_WHEEL_DELTA_WPARAM(wParam);
        return TWinMessage(WMT_MOUSE_WHEEL, 0, 0, &delta);

    default:
        MSG msg;
        ZeroMemory(&msg, sizeof(MSG));
        msg.lParam = lParam;
        msg.wParam = wParam;
        msg.message = Msg;
        return TWinMessage(WMT_UNKNOWN, 0, 0, &msg);
    }
}