namespace gui::drivers; import "instance" #if defined(__WIN32__) #define WIN32_LEAN_AND_MEAN #define Method _Method #define String _String #include #include #undef Method #undef String import "Display" default: WINBASEAPI HWND WINAPI GetConsoleWindow (); private: static HANDLE hStdin, hStdout; static byte keys[256]; static Point mousePosition; static Box mouseRange; default: extern int __ecereVMethodID___ecereNameSpace__ecere__gui__Window_OnKeyHit; extern int __ecereVMethodID___ecereNameSpace__ecere__gui__Window_OnKeyDown; extern int __ecereVMethodID___ecereNameSpace__ecere__gui__Window_OnKeyUp; extern int __ecereVMethodID___ecereNameSpace__ecere__gui__Window_OnMouseMove; extern int __ecereVMethodID___ecereNameSpace__ecere__gui__Window_OnLeftButtonDown; extern int __ecereVMethodID___ecereNameSpace__ecere__gui__Window_OnRightButtonDown; extern int __ecereVMethodID___ecereNameSpace__ecere__gui__Window_OnMiddleButtonDown; extern int __ecereVMethodID___ecereNameSpace__ecere__gui__Window_OnLeftDoubleClick; extern int __ecereVMethodID___ecereNameSpace__ecere__gui__Window_OnRightDoubleClick; extern int __ecereVMethodID___ecereNameSpace__ecere__gui__Window_OnMiddleDoubleClick; extern int __ecereVMethodID___ecereNameSpace__ecere__gui__Window_OnLeftButtonUp; extern int __ecereVMethodID___ecereNameSpace__ecere__gui__Window_OnRightButtonUp; extern int __ecereVMethodID___ecereNameSpace__ecere__gui__Window_OnMiddleButtonUp; private: /**************************************************************************** /// DRIVER IMPLEMENTATION ///////////// ****************************************************************************/ class Win32ConsoleInterface : Interface { class_property(name) = "Win32Console"; // --- User Interface System --- bool Initialize() { CONSOLE_CURSOR_INFO cursor; // FreeConsole(); AllocConsole(); { WINDOWPLACEMENT placement = { 0 }; placement.length = sizeof(WINDOWPLACEMENT); placement.showCmd = SW_NORMAL; placement.rcNormalPosition.top = 10; placement.rcNormalPosition.left = 10; placement.rcNormalPosition.right = 810; placement.rcNormalPosition.bottom = 610; SetWindowPlacement(GetConsoleWindow(), &placement); ShowWindow(GetConsoleWindow(), SW_SHOW); SetForegroundWindow(GetConsoleWindow()); } hStdin = GetStdHandle(STD_INPUT_HANDLE); SetConsoleMode(hStdin, ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT); hStdout = GetStdHandle(STD_OUTPUT_HANDLE); //SetConsoleMode(hStdout, 0); FillBytes(keys, 0, sizeof(keys)); SetConsoleTitle(guiApp.desktop.text ? guiApp.desktop.text : ""); cursor.bVisible = FALSE; cursor.dwSize = 100; SetConsoleCursorInfo(hStdout, &cursor); SetTimer(null, 0, (uint)(1000.0 / 18.2), null); return true; } void Terminate() { CONSOLE_CURSOR_INFO cursor; SetConsoleMode(hStdout, ENABLE_PROCESSED_OUTPUT); cursor.bVisible = TRUE; cursor.dwSize = 100; SetConsoleCursorInfo(hStdout, &cursor); DumpErrors(true); // ShowWindow(GetConsoleWindow(), SW_HIDE); /* FreeConsole(); if(AllocConsole()) */ { // SetForegroundWindow(GetActiveWindow()); WINDOWPLACEMENT placement = { 0 }; placement.length = sizeof(WINDOWPLACEMENT); placement.showCmd = SW_HIDE; SetWindowPlacement(GetConsoleWindow(), &placement); } } bool ProcessInput(bool processAll) { DWORD numInput; int c; GetNumberOfConsoleInputEvents(hStdin, &numInput); if(numInput) { for(c = 0; c= 0 && y >= 0 && x < guiApp.desktop.clientSize.w && y < guiApp.desktop.clientSize.h) ? TRUE : FALSE }; SetConsoleCursorInfo(hStdout, &cursor); SetConsoleCursorPosition(hStdout, coords); } // --- Clipboard manipulation --- void ClearClipboard() { if(OpenClipboard(null)) { EmptyClipboard(); CloseClipboard(); } } bool AllocateClipboard(ClipBoard clipBoard, uint size) { bool result = false; clipBoard.handle=GlobalAlloc(GHND | GMEM_DDESHARE, size); if(clipBoard.handle) { clipBoard.text=GlobalLock(clipBoard.handle); if(clipBoard.text) result = true; else GlobalFree(clipBoard.handle); } return result; } bool SaveClipboard(ClipBoard clipBoard) { bool status = false; if(clipBoard.handle) { GlobalUnlock(clipBoard.handle); if(OpenClipboard(null)) { EmptyClipboard(); if(SetClipboardData(CF_TEXT,clipBoard.handle)) { CloseClipboard(); status = true; } } if(!status) GlobalFree(clipBoard.handle); } return status; } bool LoadClipboard(ClipBoard clipBoard) { bool result = false; if(OpenClipboard(null)) { if((clipBoard.handle = GetClipboardData(CF_TEXT))) { if((clipBoard.text = GlobalLock(clipBoard.handle))) result = true; } CloseClipboard(); } return result; } void UnloadClipboard(ClipBoard clipBoard) { if(clipBoard.handle) GlobalUnlock(clipBoard.handle); } // --- State based input --- bool AcquireInput(void * windowHandle, bool state) { return false; } bool GetMouseState(MouseButtons * buttons, int * x, int * y) { bool result = false; return result; } bool GetJoystickState(int device, Joystick joystick) { bool result = false; return result; } bool GetKeyState(Key key) { if(key < 256) return keys[key] != 0; else if(key == capsState) return GetKeyState(VK_CAPITAL) & 0x00000001; else if(key == numState) return GetKeyState(VK_NUMLOCK) & 0x00000001; else if(key == scrollState) return GetKeyState(VK_SCROLL) & 0x00000001; return 0; } }; #endif