Mickey_from_nsk
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору NNS Цитата: А как при помощи этих функций сделать так, чтоб экран был синим а в его середине вывелся определенный текст? | В винде при работе с консолью много разных функций. В том числе, есть некий аналог работы с видеопамятью. То есть, создаешь экранный буфер, каждый элемент его - структура CHAR_INFO, в которой один из элементов - маска цветов, другой - символ. Заполняешь его чем хочешь, потом, просто делаешь его активным. Пример из MSDN: Код: #include <windows.h> VOID main(void) { HANDLE hStdout, hNewScreenBuffer; SMALL_RECT srctReadRect; SMALL_RECT srctWriteRect; CHAR_INFO chiBuffer[160]; // [2][80]; COORD coordBufSize; COORD coordBufCoord; BOOL fSuccess; // Get a handle to the STDOUT screen buffer to copy from and // create a new screen buffer to copy to. hStdout = GetStdHandle(STD_OUTPUT_HANDLE); hNewScreenBuffer = CreateConsoleScreenBuffer( GENERIC_READ | // read/write access GENERIC_WRITE, 0, // not shared NULL, // no security attributes CONSOLE_TEXTMODE_BUFFER, // must be TEXTMODE NULL); // reserved; must be NULL if (hStdout == INVALID_HANDLE_VALUE || hNewScreenBuffer == INVALID_HANDLE_VALUE) { MyErrorExit("CreateConsoleScreenBuffer"); } // Make the new screen buffer the active screen buffer. if (! SetConsoleActiveScreenBuffer(hNewScreenBuffer) ) MyErrorExit("SetConsoleActiveScreenBuffer"); // Set the source rectangle. srctReadRect.Top = 0; // top left: row 0, col 0 srctReadRect.Left = 0; srctReadRect.Bottom = 1; // bot. right: row 1, col 79 srctReadRect.Right = 79; // The temporary buffer size is 2 rows x 80 columns. coordBufSize.Y = 2; coordBufSize.X = 80; // The top left destination cell of the temporary buffer is // row 0, col 0. coordBufCoord.X = 0; coordBufCoord.Y = 0; // Copy the block from the screen buffer to the temp. buffer. fSuccess = ReadConsoleOutput( hStdout, // screen buffer to read from chiBuffer, // buffer to copy into coordBufSize, // col-row size of chiBuffer coordBufCoord, // top left dest. cell in chiBuffer &srctReadRect); // screen buffer source rectangle if (! fSuccess) MyErrorExit("ReadConsoleOutput"); // Set the destination rectangle. srctWriteRect.Top = 10; // top lt: row 10, col 0 srctWriteRect.Left = 0; srctWriteRect.Bottom = 11; // bot. rt: row 11, col 79 srctWriteRect.Right = 79; // Copy from the temporary buffer to the new screen buffer. fSuccess = WriteConsoleOutput( hNewScreenBuffer, // screen buffer to write to chiBuffer, // buffer to copy from coordBufSize, // col-row size of chiBuffer coordBufCoord, // top left src cell in chiBuffer &srctWriteRect); // dest. screen buffer rectangle if (! fSuccess) MyErrorExit("WriteConsoleOutput"); Sleep(10000); // Restore the original active screen buffer. if (! SetConsoleActiveScreenBuffer(hStdout)) MyErrorExit("SetConsoleActiveScreenBuffer"); } | Второй вопрос. А там то в чем проблема? Берешь файл, переписываешь его и в нужном месте подставляешь. В этот файл добавить уже ничего не удастся. Хотя... В принципе - через маппирование файлов на память можно и это решить. Тебе как надо? Просто или с извратами? |