Mercurial > LightClone
view LightClone/Source/Window.cpp @ 51:efd2b1ca5b77
Clean up gui
author | koryspansel <koryspansel@bendbroadband.com> |
---|---|
date | Tue, 27 Sep 2011 09:42:01 -0700 |
parents | 48705dc6e568 |
children |
line wrap: on
line source
/* * Window */ #include "Window.h" #include "VertexTypes.h" /* * kClassName */ static const TCHAR* kClassName = L"LightCloneClass"; /* * kCaption */ static const TCHAR* kCaption = L"LightClone"; /* * pInstance */ Window* Window::pInstance = NULL; /* * Window */ Window::Window(WindowCallback* pHandler) : pCallback(pHandler) { pInstance = this; kWindow = NULL; } /* * Initialize */ ErrorCode Window::Initialize() { TRACE("Window::Initialize\n"); HINSTANCE hInstance = GetModuleHandle(NULL); WNDCLASSEX kClass; kClass.cbSize = sizeof(WNDCLASSEX); kClass.cbClsExtra = 0; kClass.cbWndExtra = 0; kClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); kClass.hCursor = LoadCursor(NULL, IDC_ARROW); kClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); kClass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); kClass.hInstance = hInstance; kClass.lpfnWndProc = &MessageRouter; kClass.lpszClassName = kClassName; kClass.lpszMenuName = NULL; kClass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; TRACE(" Registering window class\n"); ATOM kAtom = RegisterClassEx(&kClass); if(kAtom) { TRACE(" Success!\n"); const uint32 nStyleEx = WS_EX_OVERLAPPEDWINDOW; const uint32 nStyle = WS_OVERLAPPEDWINDOW | WS_VISIBLE; RECT kDesktopRectangle; //GetClientRect(GetDesktopWindow(), &kDesktopRectangle); kDesktopRectangle.left = 0; kDesktopRectangle.top = 0; kDesktopRectangle.right = GetSystemMetrics(SM_CXSCREEN); kDesktopRectangle.bottom = GetSystemMetrics(SM_CYSCREEN); TRACE("Desktop Rectangle:\n"); TRACE(" Left : %d\n", kDesktopRectangle.left); TRACE(" Top : %d\n", kDesktopRectangle.top); TRACE(" Right : %d\n", kDesktopRectangle.right); TRACE(" Bottom : %d\n", kDesktopRectangle.bottom); RECT kRectangle; kRectangle.left = 0; kRectangle.top = 0; kRectangle.right = ScreenSizeX; kRectangle.bottom = ScreenSizeY; TRACE("Window Rectangle:\n"); TRACE(" Left : %d\n", kRectangle.left); TRACE(" Top : %d\n", kRectangle.top); TRACE(" Right : %d\n", kRectangle.right); TRACE(" Bottom : %d\n", kRectangle.bottom); AdjustWindowRectEx(&kRectangle, nStyle, FALSE, nStyleEx); TRACE("Adjusted Rectangle:\n"); TRACE(" Left : %d\n", kRectangle.left); TRACE(" Top : %d\n", kRectangle.top); TRACE(" Right : %d\n", kRectangle.right); TRACE(" Bottom : %d\n", kRectangle.bottom); int32 nW = kRectangle.right - kRectangle.left; int32 nH = kRectangle.bottom - kRectangle.top; int32 nX = ((kDesktopRectangle.right - kDesktopRectangle.left) - nW) / 2; int32 nY = ((kDesktopRectangle.bottom - kDesktopRectangle.top) - nH) / 2; TRACE(" Creating window\n"); TRACE(" Position : (%d, %d)\n", nX, nY); TRACE(" Dimensions : (%d, %d)\n", nW, nH); kWindow = CreateWindowEx(nStyleEx, kClassName, kCaption, nStyle, nX, nY, nW, nH, NULL, NULL, hInstance, NULL); if(kWindow) { TRACE(" Success!\n"); UpdateWindow(kWindow); ShowWindow(kWindow, SW_SHOW); return Error_Success; } } TRACE(" Failed to initialize window!\n"); return Error_Fail; } /* * Terminate */ void Window::Terminate() { if(kWindow) { DestroyWindow(kWindow); } } /* * GetHandle */ HWND Window::GetHandle() const { return kWindow; } /* * MessageRouter */ LRESULT CALLBACK Window::MessageRouter(HWND hWnd, UINT nMessage, WPARAM wParam, LPARAM lParam) { //NOTE: This only works for a single, global window instance if(pInstance && pInstance->kWindow) { if(pInstance->pCallback) { return pInstance->pCallback->OnMessage(pInstance, nMessage, wParam, lParam); } } return DefWindowProc(hWnd, nMessage, wParam, lParam); }