Вот маленьки .com под реал моду с использованием биосовых интов и прямого доступа к текстовой видео-памяти. Все что делает это выводит пару разноцветных строк. Теперь вопрос, как сделать аналогичное под виндой, юзая только стандартные либы и винапи. Тоесть включить определенный режим (фул скрин) и в нем работать с текстом в цвете. Само собой, чтобы в фулскрин разворачиволось само если это всеже эмуль доса будет _930874374__BIOSINTS.COM
Есть такая функция - SetConsoleTextAttribute. Нужна она именно для того, чтобы играться с цветом текста и фона (16 цветов). Ну а вывод на консоль - WriteConsole Вот с разворотом в фулскрин сложнее - тут думать надо.. Вообще, можно поиграться с SetConsoleWindowInfo, но это не совсем то - изменяет размеры и положение окна.
Может сделать так: установить 640на480 фулскрин виндовыми средствами(возможно? в смысле не директикс и тд, а штатными) ,уже на нем сделать консоль и ее растянуть на 640на480. В итоге получим уже рабочую область, и на ней WrriteConsole/SetconsoleTextAttrib ?
Проверил в WinXP - SP2. Работает замечательно (переключение в полноэкранный режим). <font size=1> Код (Text): #include <windows.h> #include <stdio.h> // prototypes BOOL FullScreenConsole9x(void); BOOL FullScreenConsoleNT(void); // ---------------------------------------------------------------------- ----- BOOL FullScreenConsole9x(void) { BOOL ok = FALSE; // console finding guid // a unique number to identify this console - replace this with your own #define CON_GUID TEXT("CON_GUID-{68E311EF-BF32-4b0f-8D35-E84E4A463096}") // hwnd for console window HWND hConWnd = NULL; // magic command WPARAM magic = 57359; // buffer for storing a substitute title TCHAR szTempTitle[] = CON_GUID; // buffer for storing current console title TCHAR szTempString[MAX_PATH]; // obtain the current console title if( GetConsoleTitle(szTempString, sizeof(szTempString)/sizeof(TCHAR) ) ) { // replace the current title with substitute title SetConsoleTitle(szTempTitle); // give it a chance to set in Sleep(50); // locate the console window // console window class on W9x is "tty" hConWnd = FindWindow(TEXT("tty"), szTempTitle); // restore the original console title SetConsoleTitle(szTempString); } // verify the console hwnd if ( hConWnd != NULL ) { // pause before changing to fullscreen Sleep(450); // this method works by faking a keyboard command SendMessage(hConWnd,WM_COMMAND,magic,0); ok = TRUE; } return ok; } // ---------------------------------------------------------------------- ----- BOOL FullScreenConsoleNT(void) { // typedef function pointer for undocumented API typedef BOOL WINAPI (*SetConsoleDisplayModeT)(HANDLE,DWORD,DWORD*); // declare one such function pointer SetConsoleDisplayModeT SetConsoleDisplayMode; // load kernel32.dll HINSTANCE hLib = LoadLibrary("KERNEL32.DLL"); if ( hLib == NULL ) { // highly unlikely but good practice just the same return FALSE; } // assign procedure address to function pointer SetConsoleDisplayMode = ( SetConsoleDisplayModeT ) GetProcAddress(hLib,"SetConsoleDisplayMode"); // check if the function pointer is valid // since the function is undocumented if ( SetConsoleDisplayMode == NULL ) { // play nice with windows FreeLibrary(hLib); return FALSE; } DWORD newmode = 1; // fullscreen mode DWORD oldmode; // get handle to stdout HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); // pause before changing to fullscreen Sleep(500); // set full screen mode SetConsoleDisplayMode(hStdOut,newmode,&oldmode); // play nice with windows FreeLibrary(hLib); return TRUE; } // ---------------------------------------------------------------------- ----- int main(void) { OSVERSIONINFO VerInfo; ZeroMemory(&VerInfo,sizeof(VerInfo)); VerInfo.dwOSVersionInfoSize = sizeof(VerInfo); GetVersionEx(&VerInfo); // Why a switch? because I felt like switching... har har switch ( VerInfo.dwPlatformId ) { case VER_PLATFORM_WIN32_NT : FullScreenConsoleNT(); break; case VER_PLATFORM_WIN32_WINDOWS : FullScreenConsole9x(); break; default: break; } // issue a report printf("This is a test.\nHit enter to exit"); // wait for keyboard hit getchar(); return 0; } </font><!--size--> <font color="#CC0000]По правилам форума большой кодезь - аттачем.</font><!--color-->
2alpet Проверил - да, и под win9x и под xp работает норм. ps. И может кто посоветует сорцов/примеров по работе с консолью. Как всякие цветастые тексты выводить ну и в таком духе.
Ну рисовать шедевральные полотна в консоли - это символы псевдографики. Ну а работа с консолью, вроде, ничего сложного из себя не представляет - 4-5 апишек, в СДК или МСДН ищи слово Console. В МСДН где-то видел список всех функций для работы с консолью с кратеньким описанием.
Еще вопрос. Каким образом скрыть в фулскриновой консоли курсор мыши ? ShowCursor(0) для мыши не катит (не работает в консоли видимо?). Текстовый курсор вполне по SetConsoleCursorInfo скрывается, а мышиный глаза мозолит. И еще один до кучи Каким образом лучше/быстрее всего будет делать очистку консоли ? 80x25 буфер пробелов както не то..
kas1e В аттаче проект работающий на редирект консоли в обычное окно. Выполняет Low-Level чтение консоли, так что можно запускать и DOS приложения, и к примеру Far. Впринципе на большинство вопросов по сабжу отвечает. Написан на Delphi 6.