Работа с графикой (Dev C++) - C (СИ)
Формулировка задачи:
Нарисовать квадрат и написать в середине слово hello
Среда: Dev-C++
всем спасибо за помощь..))
Решение задачи: «Работа с графикой (Dev C++)»
textual
Листинг программы
#include <windows.h>
#include <iostream>
using namespace std;
void draw_rectangle(HANDLE _hStdout, int left, int top, int right, int bottom); //задание прямоугольника по координатам:
void set_cursor_pos(HANDLE _hStdout, int x, int y);//установка курсора на указанный столбец и строку
char fill_char = ' ';
int main()
{
HANDLE hStdout;
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
if (hStdout == INVALID_HANDLE_VALUE)
cout<<"ERROR in GetStdHandle STD_INPUT_HANDLE"<<endl;
SetConsoleTextAttribute(hStdout, BACKGROUND_RED);
draw_rectangle(hStdout,6,3,14,7);
COORD p1 = {7,4};
SetConsoleCursorPosition(hStdout, p1);
cout<<"HELLO!"<<endl;
COORD p2 = {0,24};
SetConsoleCursorPosition(hStdout, p2);
SetConsoleTextAttribute(hStdout, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
return 0;
}
//--------------------------------------------------------------
void draw_rectangle(HANDLE _hStdout, int left, int top, int right, int bottom) //задание прямоугольника по координатам:
{ //верхний левый правый нижний углы
DWORD cWritten;
int width = right - left + 1;
for(int y=top; y<=bottom; y++) //stack of strings
{
set_cursor_pos(_hStdout, left, y);
for(int j=0; j<width; j++)
{
if (!WriteFile(_hStdout,&fill_char,sizeof(char),&cWritten,NULL))
{
cout<<"ERROR in WriteFile"<<endl;
return;
}
}
}
}
//--------------------------------------------------------------
void set_cursor_pos(HANDLE _hStdout, int x, int y)//установка курсора на указанный столбец и строку
{
COORD cursor_pos; //origin in upper left corner
cursor_pos.X = x - 1; //Windows starts at (0, 0)
cursor_pos.Y = y - 1; //we start at (1, 1)
SetConsoleCursorPosition(_hStdout, cursor_pos);
}
Объяснение кода листинга программы
- #include
Включает библиотеку Windows, которая содержит функции для работы с Windows API. - #include
Включает библиотеку iostream, которая содержит функции для ввода и вывода данных. - using namespace std; Объявляет, что мы будем использовать функции из стандартной библиотеки, чтобы избежать необходимости писать std:: перед каждым использованием.
- void draw_rectangle(HANDLE _hStdout, int left, int top, int right, int bottom); Эта функция задает прямоугольник на экране, используя указанные координаты.
- void set_cursor_pos(HANDLE _hStdout, int x, int y); Эта функция устанавливает курсор на экране на указанную позицию.
- char fill_char = ' '; Эта переменная содержит символ, который будет использоваться для заполнения прямоугольника.
- int main() Это точка входа в программу, где все начинается.
- HANDLE hStdout; Эта переменная содержит дескриптор стандартного вывода, который используется для взаимодействия с консолью.
- hStdout = GetStdHandle(STD_OUTPUT_HANDLE); Получает дескриптор стандартного вывода.
- if (hStdout == INVALID_HANDLE_VALUE) Проверяет, является ли дескриптор валидным. Если нет, выводит сообщение об ошибке и завершает программу.
- SetConsoleTextAttribute(hStdout, BACKGROUND_RED); Устанавливает цвет текста на красный.
- draw_rectangle(hStdout,6,3,14,7); Рисует прямоугольник на экране с указанными координатами.
- COORD p1 = {7,4}; Определяет координаты, куда будет установлен курсор.
- SetConsoleCursorPosition(hStdout, p1); Устанавливает курсор на указанные координаты.
- cout<<
HELLO!<<endl; Выводит текстHELLO!на экран. - COORD p2 = {0,24}; Определяет координаты, куда будет установлен курсор.
- SetConsoleCursorPosition(hStdout, p2); Устанавливает курсор на указанные координаты.
- SetConsoleTextAttribute(hStdout, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY); Устанавливает цвет текста на красный, зеленый, синий и интенсивный.
- return 0; Завершает программу.
- //-------------------------------------------------------------- Это комментарий, который используется для обозначения начала и конца блока кода.