1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <Windows.h>
#include <algorithm>
using namespace std;
int nScreenWidth = 120; // Console Screen Size X (columns)
int nScreenHeight = 40; // Console Screen Size Y (rows)
char c;
void write(wchar_t *buffer, int row, int col, wchar_t ch)
{
buffer[row*nScreenWidth + col] = ch;
}
void write(wchar_t *buffer, int row, int col, const std::wstring& s)
{
swprintf(&buffer[row * nScreenWidth + col], s.size()+1, L"%s", s.c_str());
}
int main()
{
// Create Screen Buffer
wchar_t* screen = new wchar_t[nScreenWidth * nScreenHeight];
std::fill_n(screen, nScreenHeight * nScreenWidth, L' ');
HANDLE hConsole = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
if (hConsole == INVALID_HANDLE_VALUE)
{
std::cerr << "CreateConsoleScreenBuffer win error: " << GetLastError() << '\n';
return EXIT_FAILURE;
}
if (!SetConsoleActiveScreenBuffer(hConsole))
{
std::cerr << "CreateConsoleScreenBuffer win error: " << GetLastError() << '\n';
return EXIT_FAILURE;
}
DWORD dwBytesWritten = 0;
write(screen, 0, 0, L'╔');
for (int row = 1; row < nScreenHeight -1; ++row)
write(screen, row, 0, L'║');
write(screen, 1, 2, L"Hello world");
if (WriteConsoleOutputCharacter(hConsole, screen, nScreenWidth * nScreenHeight, { 0,0 }, &dwBytesWritten) == 0)
{
std::cerr << "CreateConsoleScreenBuffer win error: " << GetLastError() << '\n';
return EXIT_FAILURE;
}
_getch();
}
|