127 buffer[
len++] =
'\r';
128 buffer[
len++] =
'\n';
130 buffer[
len++] = *text;
143 SendMessage(
sys_console.hWndOutput, EM_SETSEL, 0, -1);
148 SendMessage(
sys_console.hWndOutput, EM_LINESCROLL, 0, 0xFFFF);
149 SendMessage(
sys_console.hWndOutput, EM_SCROLLCARET, 0, 0);
151 SendMessage(
sys_console.hWndOutput, EM_REPLACESEL, FALSE, (LPARAM)buffer);
154 SendMessage(
sys_console.hWndOutput, EM_LINESCROLL, 0, 0xFFFF);
155 SendMessage(
sys_console.hWndOutput, EM_SCROLLCARET, 0, 0);
229static LRESULT CALLBACK
Sys_ConsoleProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
233 if (LOWORD(wParam) != WA_INACTIVE) {
241 const int ays = MessageBox(hWnd,
"There are still players on the server! Really shut it down?",
"WARNING!", MB_YESNO + MB_ICONEXCLAMATION);
249 if (HIWORD(wParam) == BN_CLICKED) {
251 SendMessage(
sys_console.hWndOutput, EM_SETSEL, 0, -1);
252 SendMessage(
sys_console.hWndOutput, WM_COPY, 0, 0);
253 }
else if ((HWND)lParam ==
sys_console.hWndClear) {
254 SendMessage(
sys_console.hWndOutput, EM_SETSEL, 0, -1);
255 SendMessage(
sys_console.hWndOutput, WM_CLEAR, 0, 0);
258 }
else if (HIWORD(wParam) == EN_VSCROLL)
259 InvalidateRect(
sys_console.hWndOutput,
nullptr, TRUE);
262 case WM_CTLCOLOREDIT:
264 SetBkMode((HDC)wParam, TRANSPARENT);
265 SetBkColor((HDC)wParam, RGB(255, 255, 255));
266 SetTextColor((HDC)wParam, RGB(0, 0, 0));
268 }
else if ((HWND)lParam ==
sys_console.hWndInput) {
269 SetBkMode((HDC)wParam, TRANSPARENT);
270 SetBkColor((HDC)wParam, RGB(255, 255, 255));
271 SetTextColor((HDC)wParam, RGB(0, 0, 0));
276 case WM_CTLCOLORSTATIC:
278 SetBkMode((HDC)wParam, TRANSPARENT);
279 SetBkColor((HDC)wParam, RGB(127, 127, 127));
282 SetTextColor((HDC)wParam, RGB(255, 0, 0));
284 SetTextColor((HDC)wParam, RGB(0, 0, 0));
292 InvalidateRect(
sys_console.hWndMsg,
nullptr, TRUE);
300 return DefWindowProc(hWnd, uMsg, wParam, lParam);
388 const HDC hDC = GetDC(0);
389 int w = GetDeviceCaps(hDC, HORZRES);
390 int h = GetDeviceCaps(hDC, VERTRES);
393 r.left = (w - 540) / 2;
394 r.top = (h - 455) / 2;
395 r.right = r.left + 540;
396 r.bottom = r.top + 455;
400 const int x = r.left;
402 w = r.right - r.left;
403 h = r.bottom - r.top;
412 wc.hCursor = LoadCursor(
nullptr, IDC_ARROW);
413 wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
416 wc.cbSize =
sizeof(WNDCLASSEX);
418 if (!RegisterClassEx(&wc)) {
419 MessageBox(
nullptr,
"Could not register console window class",
"ERROR", MB_OK | MB_ICONERROR | MB_TASKMODAL);
423 sys_console.hWnd = CreateWindowEx(0,
CONSOLE_WINDOW_CLASS_NAME,
CONSOLE_WINDOW_NAME,
CONSOLE_WINDOW_STYLE, x, y, w, h,
nullptr,
nullptr,
global_hInstance,
nullptr);
426 MessageBox(
nullptr,
"Could not create console window",
"ERROR", MB_OK | MB_ICONERROR | MB_TASKMODAL);
430 sys_console.hWndMsg = CreateWindowEx(0,
"STATIC",
"", WS_CHILD | SS_SUNKEN, 5, 5, 530, 30,
sys_console.hWnd,
nullptr,
global_hInstance,
nullptr);
431 sys_console.hWndOutput = CreateWindowEx(0,
"EDIT",
"", WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | ES_MULTILINE, 5, 40, 530, 350,
sys_console.hWnd,
nullptr,
global_hInstance,
nullptr);
432 sys_console.hWndInput = CreateWindowEx(0,
"EDIT",
"", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL, 5, 395, 530, 20,
sys_console.hWnd,
nullptr,
global_hInstance,
nullptr);
433 sys_console.hWndCopy = CreateWindowEx(0,
"BUTTON",
"copy", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 5, 425, 70, 25,
sys_console.hWnd,
nullptr,
global_hInstance,
nullptr);
434 sys_console.hWndClear = CreateWindowEx(0,
"BUTTON",
"clear", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 80, 425, 70, 25,
sys_console.hWnd,
nullptr,
global_hInstance,
nullptr);
435 sys_console.hWndQuit = CreateWindowEx(0,
"BUTTON",
"quit", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 465, 425, 70, 25,
sys_console.hWnd,
nullptr,
global_hInstance,
nullptr);
438 sys_console.hFont = CreateFont(14, 0, 0, 0, FW_LIGHT, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FIXED_PITCH | FF_MODERN,
"Courier New");
439 sys_console.hFontBold = CreateFont(20, 0, 0, 0, FW_SEMIBOLD, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,
"System");
449 sys_console.hBrushMsg = CreateSolidBrush(RGB(127, 127, 127));
450 sys_console.hBrushOutput = CreateSolidBrush(RGB(255, 255, 255));
451 sys_console.hBrushInput = CreateSolidBrush(RGB(255, 255, 255));