Advertisement
Guest User

Untitled

a guest
Nov 17th, 2018
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.73 KB | None | 0 0
  1. #pragma once
  2.  
  3. #include <Windows.h>
  4.  
  5. #include <iostream>
  6.  
  7. namespace Graphics
  8. {
  9.     template <class DERIVED_TYPE>
  10.     class Window
  11.     {
  12.         public:
  13.             static LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  14.             {
  15.                 DERIVED_TYPE *pThis = NULL;
  16.  
  17.                 if (message == WM_NCCREATE)
  18.                 {
  19.                     CREATESTRUCT* pCreate = (CREATESTRUCT*)lParam;
  20.                     pThis = (DERIVED_TYPE*)pCreate->lpCreateParams;
  21.                     SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)pThis);
  22.  
  23.                     pThis->windowHandle = hwnd;
  24.                 }
  25.                 else
  26.                 {
  27.                     pThis = (DERIVED_TYPE*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
  28.                 }
  29.  
  30.                 if (pThis)
  31.                 {
  32.                     return pThis->HandleMessage(message, wParam, lParam);
  33.                 }
  34.                 else
  35.                 {
  36.                     return DefWindowProc(hwnd, message, wParam, lParam);
  37.                 }
  38.             }
  39.  
  40.             Window() : windowHandle(NULL) { }
  41.  
  42.             BOOL CreateWin(PCWSTR windowName, int width = 800, int height = 600)
  43.             {
  44.                 screenWidth = width;
  45.                 screenHeight = height;
  46.  
  47.                 instance = GetModuleHandle(NULL);
  48.  
  49.                 windowClass = { 0 };
  50.                 windowClass.hbrBackground = NULL;
  51.                 windowClass.hCursor = LoadCursor(NULL, IDC_ARROW);
  52.                 windowClass.hInstance = GetModuleHandle(NULL);
  53.                 windowClass.lpfnWndProc = WindowProc;
  54.                 windowClass.lpszClassName = ClassName();
  55.                 windowClass.style = CS_HREDRAW | CS_VREDRAW;
  56.  
  57.                 if (!RegisterClass(&windowClass))
  58.                 {
  59.                     MessageBox(NULL, L"Could not create Window!", L"Error", MB_OK);
  60.                 }
  61.  
  62.                 windowHandle = CreateWindowEx(
  63.                     0,
  64.                     ClassName(),
  65.                     windowName,
  66.                     (
  67.                     WS_OVERLAPPED |
  68.                     WS_CAPTION |
  69.                     WS_SYSMENU |
  70.                     WS_MINIMIZEBOX |
  71.                     WS_MAXIMIZEBOX
  72.                     ),
  73.                     CW_USEDEFAULT,
  74.                     CW_USEDEFAULT,
  75.                     screenWidth, screenHeight,
  76.                     NULL,
  77.                     NULL,
  78.                     instance,
  79.                     this
  80.                 );
  81.  
  82.                 hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
  83.  
  84.                 if (FAILED(hr))
  85.                 {
  86.                     MessageBox(NULL, L"Could not initialize COM", L"Error", MB_OK);
  87.                 }
  88.  
  89.                 return (windowHandle ? TRUE : FALSE);
  90.             }
  91.  
  92.             WNDCLASS GetClass() const { return windowClass; }
  93.             PCWSTR GetClassN() const { return ClassName(); }
  94.             HWND GetWindow() const { return windowHandle; }
  95.             HINSTANCE GetInstance() const { return instance; }
  96.  
  97.             int GetScreenWidth() { return screenWidth; }
  98.             int GetScreenHeight() { return screenHeight; }
  99.  
  100.             BOOL Show()
  101.             {
  102.                 if (!ShowWindow(windowHandle, SW_RESTORE))
  103.                 {
  104.                     return FALSE;
  105.                 }
  106.                
  107.                 return TRUE;
  108.             }
  109.  
  110.         private:
  111.             virtual PCWSTR ClassName() const = 0;
  112.             virtual LRESULT HandleMessage(UINT message, WPARAM wParam, LPARAM lParam) = 0;
  113.  
  114.             int screenWidth = 0;
  115.             int screenHeight = 0;
  116.  
  117.             HRESULT hr;
  118.             WNDCLASS windowClass;
  119.  
  120.             HINSTANCE instance;
  121.             HWND windowHandle;
  122.     };
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement