Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Приложения.doc
Скачиваний:
6
Добавлен:
09.11.2019
Размер:
374.78 Кб
Скачать

Приложение 4. Библиотека управления консолью (MyCrt.H)

#include "stdafx.h"

#include <iostream>

#include <Windows.h>

using namespace std;

#pragma once;

short MaxX();

short MaxY();

void ConWidth(int W);

void ConHeight(int H);

void ConSize(int W, int H);

void ScrollVert(int P);

void ScrollHor(int P);

void ScrSize(int W, int H);

void ScrGoTo(int X, int Y);

void CursorVisible(bool Visible);

void GoToXY(short x, short y);

unsigned short WhereX();

unsigned short WhereY();

void WhereXY(unsigned short &x, unsigned short &y);

unsigned short GetTextColors();

void TextBackground(unsigned short Color);

void TextForeground(unsigned short Color);

void TextColor(unsigned short Colors);

void ChangeTextAttribute(unsigned short Attr, unsigned short x, unsigned short y, unsigned short len);

void ClrScr();

bool ReadKey(wchar_t &c);

HANDLE hMWin = GetStdHandle(STD_OUTPUT_HANDLE);

void ColorMap()

{

for (int i = 0; i < 16; ++ i)

{

int b = i << 4;

for (int f = 0; f < 16; ++ f)

{

SetConsoleTextAttribute(hMWin, b | f);

cout << '*';

}

cout << endl;

}

}

short MaxX()

{

CONSOLE_SCREEN_BUFFER_INFO ConInfo;

GetConsoleScreenBufferInfo(hMWin, &ConInfo);

return ConInfo.dwSize.X;

}

short MaxY()

{

CONSOLE_SCREEN_BUFFER_INFO ConInfo;

GetConsoleScreenBufferInfo(hMWin, &ConInfo);

return ConInfo.dwSize.Y;

}

void ConWidth(int W)

{

CONSOLE_SCREEN_BUFFER_INFO ConInfo;

GetConsoleScreenBufferInfo(hMWin, &ConInfo);

COORD c = {W, ConInfo.dwSize.Y};

SetConsoleScreenBufferSize(hMWin, c);

}

void ConHeight(int H)

{

CONSOLE_SCREEN_BUFFER_INFO ConInfo;

GetConsoleScreenBufferInfo(hMWin, &ConInfo);

if (H < 25)

H = 25;

COORD c = {ConInfo.dwSize.X, H};

SetConsoleScreenBufferSize(hMWin, c);

}

void ConSize(int W, int H)

{

if (H < 25)

H = 25;

COORD c = {W, H};

SetConsoleScreenBufferSize(hMWin, c);

}

void ScrSize(int W, int H)

{

CONSOLE_SCREEN_BUFFER_INFO ConInfo;

GetConsoleScreenBufferInfo(hMWin, &ConInfo);

SMALL_RECT WRect = ConInfo.srWindow;

COORD c = GetLargestConsoleWindowSize(hMWin);

if (W > c.X)

W = c.X;

if (H > c.Y)

H = c.Y;

if (W > ConInfo.dwSize.X)

W = ConInfo.dwSize.X;

if (H > ConInfo.dwSize.Y)

H = ConInfo.dwSize.Y;

WRect.Right = WRect.Left + W - 1;

WRect.Bottom = WRect.Top + H - 1;

SetConsoleWindowInfo(hMWin, true, &WRect);

}

void ScrGoTo(int X, int Y)

{

CONSOLE_SCREEN_BUFFER_INFO ConInfo;

GetConsoleScreenBufferInfo(hMWin, &ConInfo);

SMALL_RECT WRect = ConInfo.srWindow;

WRect.Right = X + WRect.Right - WRect.Left;

WRect.Bottom = Y + WRect.Bottom - WRect.Top;

WRect.Left = X;

WRect.Top = Y;

SetConsoleWindowInfo(hMWin, true, &WRect);

GoToXY(X, Y);

}

void ScrollVert(int P)

{

CONSOLE_SCREEN_BUFFER_INFO ConInfo;

GetConsoleScreenBufferInfo(hMWin, &ConInfo);

SMALL_RECT WRect = ConInfo.srWindow;

WRect.Top += P;

WRect.Bottom += P;

SetConsoleWindowInfo(hMWin, true, &WRect);

GoToXY(WhereX(), WhereY() + P);

}

void ScrollHor(int P)

{

CONSOLE_SCREEN_BUFFER_INFO ConInfo;

GetConsoleScreenBufferInfo(hMWin, &ConInfo);

SMALL_RECT WRect = ConInfo.srWindow;

WRect.Left += P;

WRect.Right += P;

SetConsoleWindowInfo(hMWin, true, &WRect);

GoToXY(WhereX() + P, WhereY());

}

void CursorVisible(bool Visible)

{

CONSOLE_CURSOR_INFO CursorInfo;

GetConsoleCursorInfo(hMWin, &CursorInfo);

CursorInfo.bVisible = Visible;

SetConsoleCursorInfo(hMWin, &CursorInfo);

}

void GoToXY(short x, short y)

{

COORD c = {x, y};

SetConsoleCursorPosition(hMWin, c);

}

unsigned short WhereX()

{

CONSOLE_SCREEN_BUFFER_INFO ConInfo;

GetConsoleScreenBufferInfo(hMWin, &ConInfo);

return ConInfo.dwCursorPosition.X;

}

unsigned short WhereY()

{

CONSOLE_SCREEN_BUFFER_INFO ConInfo;

GetConsoleScreenBufferInfo(hMWin, &ConInfo);

return ConInfo.dwCursorPosition.Y;

}

void WhereXY(unsigned short &x, unsigned short &y)

{

CONSOLE_SCREEN_BUFFER_INFO ConInfo;

GetConsoleScreenBufferInfo(hMWin, &ConInfo);

x = ConInfo.dwCursorPosition.X;

y = ConInfo.dwCursorPosition.Y;

}

unsigned short GetTextColors()

{

CONSOLE_SCREEN_BUFFER_INFO ConInfo;

if (GetConsoleScreenBufferInfo(hMWin, &ConInfo))

return ConInfo.wAttributes;

else

return 0;

}

void TextBackground(unsigned short Color)

{

if (Color >= 16)

return;

Color = Color << 4;

Color = GetTextColors() & 0xFF0F | Color;

SetConsoleTextAttribute(hMWin, Color);

}

void TextForeground(unsigned short Color)

{

if (Color >= 16)

return;

Color = GetTextColors() & 0xFFF0 | Color;

SetConsoleTextAttribute(hMWin, Color);

}

void TextColor(unsigned short Colors)

{

if (Colors >= 256)

return;

SetConsoleTextAttribute(hMWin, Colors);

}

void ChangeTextAttribute(unsigned short Attr, unsigned short x, unsigned short y, unsigned short len)

{

COORD c = {x, y};

DWORD l;

FillConsoleOutputAttribute( hMWin, Attr, len, c, &l );

}

void ClrScr()

{

COORD c = {0, 0};

DWORD Chr;

CONSOLE_SCREEN_BUFFER_INFO ConInfor;

DWORD ConSize;

if (!GetConsoleScreenBufferInfo(hMWin, &ConInfor))

return;

ConSize = ConInfor.dwSize.X * ConInfor.dwSize.Y;

if (!FillConsoleOutputCharacter(hMWin, (TCHAR) ' ', ConSize, c, &Chr))

return;

if (!FillConsoleOutputAttribute(hMWin, ConInfor.wAttributes, ConSize, c, &Chr))

return;

SetConsoleCursorPosition(hMWin, c);

}

bool ReadKey(wchar_t &c)

{

bool b = 0;

c = _getwch();

if (c == 224 || !c)

c = _getwch();

else

b = 1;

return b;

}