| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- #include "PolycodeView.h"
- #include "PolyWinCore.h"
- #include "PolyCoreServices.h"
- #include "PolyCoreInput.h"
- #include "PolyRenderer.h"
- #include <io.h>
- #include <fcntl.h>
- #include <ios>
- using namespace Polycode;
- Win32Core *core = NULL;
- static void OpenConsole()
- {
- int outHandle, errHandle, inHandle;
- FILE *outFile, *errFile, *inFile;
- AllocConsole();
- CONSOLE_SCREEN_BUFFER_INFO coninfo;
- GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo);
- coninfo.dwSize.Y = 9999;
- SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coninfo.dwSize);
- outHandle = _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
- errHandle = _open_osfhandle((long)GetStdHandle(STD_ERROR_HANDLE),_O_TEXT);
- inHandle = _open_osfhandle((long)GetStdHandle(STD_INPUT_HANDLE),_O_TEXT );
- outFile = _fdopen(outHandle, "w" );
- errFile = _fdopen(errHandle, "w");
- inFile = _fdopen(inHandle, "r");
- *stdout = *outFile;
- *stderr = *errFile;
- *stdin = *inFile;
- setvbuf( stdout, NULL, _IONBF, 0 );
- setvbuf( stderr, NULL, _IONBF, 0 );
- setvbuf( stdin, NULL, _IONBF, 0 );
- std::ios::sync_with_stdio();
- }
- LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- int nWidth, nHeight;
- bool useDefault = false;
- if(!core)
- return DefWindowProc(hWnd, message, wParam, lParam);
- switch (message)
- {
- case WM_COPYDATA:
- {
- COPYDATASTRUCT *cp = (COPYDATASTRUCT*)lParam;
- wchar_t *stringData = (wchar_t*)cp->lpData;
- core->copyDataString = String(stringData);
- core->hasCopyDataString = true;
- }
- break;
- case WM_SIZE:
- nWidth = LOWORD(lParam);
- nHeight = HIWORD(lParam);
- if(core) {
- core->handleViewResize(nWidth, nHeight);
- }
- break;
- case WM_MOUSEMOVE:
- if(core)
- core->handleMouseMove(lParam,wParam);
- break;
- case WM_MOUSEWHEEL:
- if(core)
- core->handleMouseWheel(lParam,wParam);
- break;
- case WM_LBUTTONDOWN:
- if(core)
- core->handleMouseDown(CoreInput::MOUSE_BUTTON1, lParam,wParam);
- break;
- case WM_LBUTTONUP:
- if(core)
- core->handleMouseUp(CoreInput::MOUSE_BUTTON1, lParam,wParam);
- break;
- case WM_RBUTTONDOWN:
- if(core)
- core->handleMouseDown(CoreInput::MOUSE_BUTTON2, lParam,wParam);
- break;
- case WM_RBUTTONUP:
- if(core)
- core->handleMouseUp(CoreInput::MOUSE_BUTTON2, lParam,wParam);
- break;
- #ifndef NO_TOUCH_API
- case WM_TOUCH:
- if(core) {
- if(core->isMultiTouchEnabled()) {
- core->handleTouchEvent(lParam, wParam);
- }
- }
- break;
- #endif
- case WM_MBUTTONDOWN:
- if(core)
- core->handleMouseDown(CoreInput::MOUSE_BUTTON3, lParam,wParam);
- break;
- case WM_MBUTTONUP:
- if(core)
- core->handleMouseUp(CoreInput::MOUSE_BUTTON3, lParam,wParam);
- break;
- case WM_KEYDOWN:
- case WM_SYSKEYDOWN:
- if(core) {
- wchar_t unicodeChar = 0;
- MSG m;
- m.hwnd = hWnd;
- m.message = message;
- m.wParam = wParam;
- m.lParam = lParam;
- m.time = 0;
- if ( PeekMessage(&m, hWnd, 0, WM_USER, PM_NOREMOVE) && (m.message == WM_CHAR) ) {
- GetMessage(&m, hWnd, 0, WM_USER);
- unicodeChar = (wchar_t)m.wParam;
- }
- core->handleKeyDown(lParam,wParam, unicodeChar);
- }
- break;
- case WM_KEYUP:
- case WM_SYSKEYUP:
- if(core)
- core->handleKeyUp(lParam,wParam);
- break;
- case WM_CLOSE:
- if(core)
- core->Shutdown();
- useDefault = true;
- break;
- case WM_DESTROY:
- PostQuitMessage(0);
- break;
- default:
- useDefault = true;
- break;
- }
-
- if (useDefault)
- return DefWindowProc(hWnd, message, wParam, lParam);
- else
- return 0;
- }
- PolycodeView::PolycodeView(HINSTANCE hInstance, int nCmdShow, LPCTSTR windowTitle, bool resizable, bool showDebugConsole) : PolycodeViewBase() {
- /*
- typedef BOOL(WINAPI *SetProcessDPIAwarePtr)(VOID);
- SetProcessDPIAwarePtr set_process_dpi_aware_func = GetProcAddress(GetModuleHandleA("user32.dll"), "SetProcessDPIAware");
- if (set_process_dpi_aware_func) {
- set_process_dpi_aware_func();
- }
- */
- WNDCLASSEX wcex;
- wcex.cbSize = sizeof(WNDCLASSEX);
- wcex.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
- wcex.lpfnWndProc = WndProc;
- wcex.cbClsExtra = 0;
- wcex.cbWndExtra = 0;
- wcex.hInstance = hInstance;
- wcex.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
- wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
- wcex.hbrBackground = NULL;
- wcex.lpszMenuName = NULL;
- wcex.lpszClassName = L"POLYCODEAPPLICATION";
- wcex.hIconSm = LoadIcon(hInstance, IDI_APPLICATION);
- RegisterClassEx(&wcex);
- this->resizable = resizable;
- if(resizable) {
- hwnd = CreateWindowEx(WS_EX_APPWINDOW, L"POLYCODEAPPLICATION", windowTitle, WS_OVERLAPPEDWINDOW | WS_SYSMENU, 0, 0, 640, 480, NULL, NULL, hInstance, NULL);
- } else {
- hwnd = CreateWindowEx(WS_EX_APPWINDOW, L"POLYCODEAPPLICATION", windowTitle, WS_CAPTION | WS_POPUP | WS_SYSMENU, 0, 0, 640, 480, NULL, NULL, hInstance, NULL);
- }
- windowData = (void*)&hwnd;
- ShowWindow(hwnd, nCmdShow);
- UpdateWindow(hwnd);
- if(showDebugConsole) {
- OpenConsole();
- }
- }
- PolycodeView::~PolycodeView() {
- }
|