PolycodeView.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. #include "PolycodeView.h"
  2. #include "PolyWinCore.h"
  3. #include "PolyCoreServices.h"
  4. #include "PolyCoreInput.h"
  5. #include "PolyRenderer.h"
  6. using namespace Polycode;
  7. Win32Core *core = NULL;
  8. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  9. {
  10. int wmId, wmEvent;
  11. PAINTSTRUCT ps;
  12. HDC hdc;
  13. int nWidth, nHeight;
  14. if(!core)
  15. return DefWindowProc(hWnd, message, wParam, lParam);
  16. switch (message)
  17. {
  18. case WM_SIZE:
  19. nWidth = LOWORD(lParam);
  20. nHeight = HIWORD(lParam);
  21. if(core)
  22. core->getServices()->getRenderer()->Resize(nWidth, nHeight);
  23. break;
  24. case WM_MOUSEMOVE:
  25. if(core)
  26. core->handleMouseMove(lParam,wParam);
  27. break;
  28. case WM_MOUSEWHEEL:
  29. if(core)
  30. core->handleMouseWheel(lParam,wParam);
  31. break;
  32. case WM_LBUTTONDOWN:
  33. if(core)
  34. core->handleMouseDown(CoreInput::MOUSE_BUTTON1, lParam,wParam);
  35. break;
  36. case WM_LBUTTONUP:
  37. if(core)
  38. core->handleMouseUp(CoreInput::MOUSE_BUTTON1, lParam,wParam);
  39. break;
  40. case WM_RBUTTONDOWN:
  41. if(core)
  42. core->handleMouseDown(CoreInput::MOUSE_BUTTON2, lParam,wParam);
  43. break;
  44. case WM_RBUTTONUP:
  45. if(core)
  46. core->handleMouseUp(CoreInput::MOUSE_BUTTON2, lParam,wParam);
  47. break;
  48. case WM_MBUTTONDOWN:
  49. if(core)
  50. core->handleMouseDown(CoreInput::MOUSE_BUTTON3, lParam,wParam);
  51. break;
  52. case WM_MBUTTONUP:
  53. if(core)
  54. core->handleMouseUp(CoreInput::MOUSE_BUTTON3, lParam,wParam);
  55. break;
  56. case WM_KEYDOWN:
  57. if(core) {
  58. wchar_t unicodeChar = 0;
  59. MSG m;
  60. m.hwnd = hWnd;
  61. m.message = message;
  62. m.wParam = wParam;
  63. m.lParam = lParam;
  64. m.time = 0;
  65. if ( PeekMessage(&m, hWnd, 0, WM_USER, PM_NOREMOVE) && (m.message == WM_CHAR) ) {
  66. GetMessage(&m, hWnd, 0, WM_USER);
  67. unicodeChar = (wchar_t)m.wParam;
  68. }
  69. core->handleKeyDown(lParam,wParam, unicodeChar);
  70. }
  71. break;
  72. case WM_KEYUP:
  73. if(core)
  74. core->handleKeyUp(lParam,wParam);
  75. break;
  76. case WM_CLOSE:
  77. if(core)
  78. core->Shutdown();
  79. break;
  80. case WM_DESTROY:
  81. PostQuitMessage(0);
  82. break;
  83. default:
  84. return DefWindowProc(hWnd, message, wParam, lParam);
  85. }
  86. return 0;
  87. }
  88. PolycodeView::PolycodeView(HINSTANCE hInstance, int nCmdShow, LPCTSTR windowTitle) : PolycodeViewBase() {
  89. WNDCLASSEX wcex;
  90. wcex.cbSize = sizeof(WNDCLASSEX);
  91. wcex.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
  92. wcex.lpfnWndProc = WndProc;
  93. wcex.cbClsExtra = 0;
  94. wcex.cbWndExtra = 0;
  95. wcex.hInstance = hInstance;
  96. wcex.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
  97. wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
  98. wcex.hbrBackground = NULL;
  99. wcex.lpszMenuName = NULL;
  100. wcex.lpszClassName = L"POLYCODEAPPLICATION";
  101. wcex.hIconSm = LoadIcon(hInstance, IDI_APPLICATION);
  102. RegisterClassEx(&wcex);
  103. hwnd = CreateWindowEx(WS_EX_APPWINDOW, L"POLYCODEAPPLICATION", windowTitle, WS_OVERLAPPED|WS_SYSMENU,
  104. 0, 0, 640, 480, NULL, NULL, hInstance, NULL);
  105. windowData = (void*)&hwnd;
  106. ShowWindow(hwnd, nCmdShow);
  107. UpdateWindow(hwnd);
  108. }
  109. PolycodeView::~PolycodeView() {
  110. }