PolycodeView.cpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  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. bool useDefault = false;
  15. if(!core)
  16. return DefWindowProc(hWnd, message, wParam, lParam);
  17. switch (message)
  18. {
  19. case WM_SIZE:
  20. nWidth = LOWORD(lParam);
  21. nHeight = HIWORD(lParam);
  22. if(core) {
  23. core->handleViewResize(nWidth, nHeight);
  24. }
  25. break;
  26. case WM_MOUSEMOVE:
  27. if(core)
  28. core->handleMouseMove(lParam,wParam);
  29. break;
  30. case WM_MOUSEWHEEL:
  31. if(core)
  32. core->handleMouseWheel(lParam,wParam);
  33. break;
  34. case WM_LBUTTONDOWN:
  35. if(core)
  36. core->handleMouseDown(CoreInput::MOUSE_BUTTON1, lParam,wParam);
  37. break;
  38. case WM_LBUTTONUP:
  39. if(core)
  40. core->handleMouseUp(CoreInput::MOUSE_BUTTON1, lParam,wParam);
  41. break;
  42. case WM_RBUTTONDOWN:
  43. if(core)
  44. core->handleMouseDown(CoreInput::MOUSE_BUTTON2, lParam,wParam);
  45. break;
  46. case WM_RBUTTONUP:
  47. if(core)
  48. core->handleMouseUp(CoreInput::MOUSE_BUTTON2, lParam,wParam);
  49. break;
  50. case WM_TOUCH:
  51. if(core) {
  52. if(core->isMultiTouchEnabled()) {
  53. core->handleTouchEvent(lParam, wParam);
  54. }
  55. }
  56. break;
  57. case WM_MBUTTONDOWN:
  58. if(core)
  59. core->handleMouseDown(CoreInput::MOUSE_BUTTON3, lParam,wParam);
  60. break;
  61. case WM_MBUTTONUP:
  62. if(core)
  63. core->handleMouseUp(CoreInput::MOUSE_BUTTON3, lParam,wParam);
  64. break;
  65. case WM_KEYDOWN:
  66. if(core) {
  67. wchar_t unicodeChar = 0;
  68. MSG m;
  69. m.hwnd = hWnd;
  70. m.message = message;
  71. m.wParam = wParam;
  72. m.lParam = lParam;
  73. m.time = 0;
  74. if ( PeekMessage(&m, hWnd, 0, WM_USER, PM_NOREMOVE) && (m.message == WM_CHAR) ) {
  75. GetMessage(&m, hWnd, 0, WM_USER);
  76. unicodeChar = (wchar_t)m.wParam;
  77. }
  78. core->handleKeyDown(lParam,wParam, unicodeChar);
  79. }
  80. break;
  81. case WM_KEYUP:
  82. if(core)
  83. core->handleKeyUp(lParam,wParam);
  84. break;
  85. case WM_CLOSE:
  86. if(core)
  87. core->Shutdown();
  88. useDefault = true;
  89. break;
  90. case WM_DESTROY:
  91. PostQuitMessage(0);
  92. break;
  93. default:
  94. useDefault = true;
  95. break;
  96. }
  97. if (useDefault)
  98. return DefWindowProc(hWnd, message, wParam, lParam);
  99. else
  100. return 0;
  101. }
  102. PolycodeView::PolycodeView(HINSTANCE hInstance, int nCmdShow, LPCTSTR windowTitle, bool resizable) : PolycodeViewBase() {
  103. WNDCLASSEX wcex;
  104. wcex.cbSize = sizeof(WNDCLASSEX);
  105. wcex.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
  106. wcex.lpfnWndProc = WndProc;
  107. wcex.cbClsExtra = 0;
  108. wcex.cbWndExtra = 0;
  109. wcex.hInstance = hInstance;
  110. wcex.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
  111. wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
  112. wcex.hbrBackground = NULL;
  113. wcex.lpszMenuName = NULL;
  114. wcex.lpszClassName = L"POLYCODEAPPLICATION";
  115. wcex.hIconSm = LoadIcon(hInstance, IDI_APPLICATION);
  116. RegisterClassEx(&wcex);
  117. if(resizable) {
  118. hwnd = CreateWindowEx(WS_EX_APPWINDOW, L"POLYCODEAPPLICATION", windowTitle, WS_OVERLAPPEDWINDOW|WS_SYSMENU, 0, 0, 640, 480, NULL, NULL, hInstance, NULL);
  119. } else {
  120. hwnd = CreateWindowEx(WS_EX_APPWINDOW, L"POLYCODEAPPLICATION", windowTitle, WS_OVERLAPPED|WS_SYSMENU, 0, 0, 640, 480, NULL, NULL, hInstance, NULL);
  121. }
  122. windowData = (void*)&hwnd;
  123. ShowWindow(hwnd, nCmdShow);
  124. UpdateWindow(hwnd);
  125. }
  126. PolycodeView::~PolycodeView() {
  127. }