ЛЕБЕДКО ЛАБ / Лабка 7
.docxОтчет ЛЕБЕДКО И.А.
ЗФ ИСиТ 3 курс
Лабораторная работа №7
Работа с консолью.
Задание 1. Программное изменение координат курсора.
voidPrintToTheCursorPosition()
{ HANDLEconsoleOutput;
COORD cursorPos;
consoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
cursorPos.X = 30;
cursorPos.Y = 3;
SetConsoleCursorPosition(consoleOutput, cursorPos);
printf("Test string at position (30, 3)");
cursorPos.X = 15;
cursorPos.Y = 8;
SetConsoleCursorPosition(consoleOutput, cursorPos);
printf("Test string at position (15, 8)");
}
Создаем хэндл консоли, структуру для координат, и, вручную изменяя координаты позиции курсора посредством функции SetConsoleCursorPositionвыводим текст в разных местах консоли.
Задание 2. Ко всему прочему добавляем цвет
voidPrintToTheCursorPositionWithAColor()
{ HANDLEmyConsoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD cCharsWritten;
TCHAR str[] = TEXT("HELLO TO EVERYBODY\n");
HMODULE hmod = GetModuleHandleA("KERNEL32.DLL");
SetConsoleFont = (SETCONSOLEFONT) GetProcAddress(hmod, "SetConsoleFont");
if (!SetConsoleFont)
{ std::cout<<"error\n" ;
exit(1);
}
SetConsoleFont(myConsoleHandle,5);
SetConsoleTextAttribute(myConsoleHandle,FOREGROUND_GREEN | FOREGROUND_INTENSITY);
int x = 5; int y = 6;
COORD pos = {x, y};
HANDLE hConsole_c = CreateConsoleScreenBuffer( GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
SetConsoleActiveScreenBuffer(hConsole_c);
DWORD len = 18;
DWORD dwBytesWritten = 0;
WriteConsoleOutputCharacter(hConsole_c, str, len, pos, &dwBytesWritten);
pos.X=10;
pos.Y=8;
WriteConsoleOutputCharacter(hConsole_c, str, len, pos, &dwBytesWritten);
pos.X=15;
pos.Y=10;
SetConsoleCursorPosition(myConsoleHandle, pos);
WriteConsoleOutputCharacter(hConsole_c, str, len, pos, &dwBytesWritten);
getchar();
CloseHandle(hConsole_c);
}
ЦветамыизменяемспомощьюфункцииSetConsoleTextAttribute.
Задание 3. Управление цветами вывода
voidRainbowText()
{ HANDLEhstdin = GetStdHandle( STD_INPUT_HANDLE );
HANDLE hstdout = GetStdHandle( STD_OUTPUT_HANDLE );
WORD index = 0;
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(hstdout, &csbi );
SetConsoleTextAttribute(hstdout, 0xEC );
std::cout<<"Press any key to quit.\n";
while (index<13)
{ SetConsoleTextAttribute(hstdout, colors[ index ] );
std::cout<<"\t\t\t\t Hello World \t\t\t\t"<<std::endl;
if (++index >sizeof(colors)/sizeof(colors[0]))
break;
}
FlushConsoleInputBuffer(hstdin );
SetConsoleTextAttribute(hstdout, csbi.wAttributes );
}
Тут в цикле изменяем цвет для каждой строки.
Задание 6. Управление цветами и положением вывод.
voidPrintArroundAndColor()
{ HANDLEconsoleOutput;
COORD cursorPos;
consoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
WORD index = 0;
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(consoleOutput, &csbi );
cursorPos.X = 30;
cursorPos.Y = 3;
SetConsoleCursorPosition(consoleOutput, cursorPos);
SetConsoleTextAttribute(consoleOutput, 0xEC );
printf("Test string at position (30, 3)");
cursorPos.X = 15;
cursorPos.Y = 8;
SetConsoleCursorPosition(consoleOutput, cursorPos);
index++;
SetConsoleTextAttribute(consoleOutput, colors[ index ] );
printf("Test string at position (15, 8)");
}
Задание 5. Нарисуем цветной столбик.
void MyLittleProgramm1()
{ HANDLEconsoleOutput;
COORD cursorPos;
consoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(consoleOutput, &csbi );
cursorPos.X = 30;
int i=3;
while(i<15)
{ cursorPos.Y = i;
SetConsoleCursorPosition(consoleOutput, cursorPos);
SetConsoleTextAttribute(consoleOutput,FOREGROUND_GREEN | BACKGROUND_GREEN);
printf("Invisibleline");
i++;
}
}
Задание 6. Нарисовать таблицу.
voidCreateTable(intStolb, intStr)
{ HANDLE consoleOutput;
COORD cursorPos;
consoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo( consoleOutput, &csbi );
intcX=5,cY=5,X=70;
cursorPos.Y=5;
while(cX<X)
{ cursorPos.X=cX;
SetConsoleCursorPosition(consoleOutput,cursorPos);
puts("_");
cX++;
}
while(cY<(5+(2*Str)))
{ cX=4;
while(cX<=X)
{ if(cX==4 || cX==70 || (cX%(73/Stolb))==0 )
{ cursorPos.X=cX;
for(int i=1; i<3; i++)
{ cursorPos.Y=cY+i;
SetConsoleCursorPosition(consoleOutput,cursorPos);
puts("|");
}
cX++;
}
else cX++;
}
cY+=2;
cX=5;
while(cX<X)
{ if(cX%(73/Stolb)==0) { cX++; continue; }
cursorPos.X=cX;
SetConsoleCursorPosition(consoleOutput,cursorPos);
puts("_");
cX++;
}
}
}
Универсальная функция для рисования таблицы. Например, результат при аргументах 5,7: