Графика в консоли с++ Builder 6
Используются функции GDI API Windows
Если окно консоли перекрыть другим окном графика не стирается
а если изменить размер окна консоли графика стирается
Доступен весь спектр функций GDI перья кисти примитивы шрифты
регионы но нужно ли это
Хороший материал изложен здесь
=
=
//---------------------------------------------------------------------------
#include <iostream>
#include <windows.h>
#include <math.h>
#include <conio>
#include <vcl.h>
#pragma hdrstop
using namespace std;
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
// system("cls"); //очистка окна
// system("mode con cols=160 lines=65"); //размер окна
cout << "Программа строит графические примитивы \n";
cout << "Программа строит график синусоиды \n";
cout << "Программа строит спираль Пифагора \n";
// HWND handle = FindWindow("ConsoleWindowClass", NULL)
HWND handle = GetConsoleWindow();
HDC hdc = GetDC(handle);
RECT rect;
int width;
int height;
// GetWindowRect(handle, &rect);
GetClientRect(handle, &rect);
width = rect.right - rect.left ;
height = rect.bottom - rect.top;
cout << "width "<< width <<endl;
cout << "height "<< height <<endl;
HPEN hpen, hpenOld;
HBRUSH hbrush, hbrushOld;
//Создаем зеленое перо.
hpen = CreatePen(PS_SOLID, 2, RGB(0, 255, 0));
//Создаем красную кисть .
hbrush = CreateSolidBrush(RGB(255, 0, 0));
//новое перо и кисть в контекст,, текущие перо и кисть запоминаем
hpenOld = SelectObject(hdc, hpen);
hbrushOld = SelectObject(hdc, hbrush);
Rectangle(hdc, 800,100,1000,200 );
MoveToEx(hdc,700, 10,0);
LineTo(hdc,750, 300);
//синусоида
int sf=400; //смещение
int a=100; //амплитуда
int f=20; // частота
for(float i=-400; i<500; i++){
float y= sf- sin(i/f )*a;
SetPixel(hdc, sf+i, y, RGB(0, 255, 0));
SetPixel(hdc, sf+ i+1,y+1, RGB(0, 255, 0));
}
// спираль пифагора
int r_max = 300;
int n = 12;
cout << "Введите число диаметр спирали: ";
cin >> r_max; int sm=r_max+100;
cout << "Введите число количество витков: ";
cin >> n;
int k;
double x, y, r, T;
k = n * 500;
for (int i = 0; i< k; i++)
{
T = (n * 2 * M_PI) * i / k;
r = T / (n * 2 * M_PI) * r_max;
x = floor(r * cos(T));
y = floor(r * sin(T));
SetPixel(hdc,sm+x ,sm- y, RGB(255, 0, 255)); //жирная точка
SetPixel(hdc,sm+x+1 ,sm- y+1, RGB(255, 0, 255));
}
getch();//
//При выходе следующие функции обязательны
//сохраненные перо и кисть в контекст наши не нужные перо и кисть удаляем
SelectObject(hdc, hpenOld);
DeleteObject(hpen);
SelectObject(hdc, hbrushOld);
DeleteObject(hbrush);
// Функция ReleaseDC освобождает контекст устройства (DC) для использования другими приложениями.
ReleaseDC(handle, hdc);
return 0;
}
//---------------------------------------------------------------------------
=
=
|