Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2011, 16:18   #1
Акунёк
Пользователь
 
Регистрация: 31.01.2011
Сообщений: 14
По умолчанию Графика в консольном приложении.

Подскажите какие есть способы работать с графикой в консольном приложении(кружочки, синусойды итп). Интересует конкретно VC6++(Code::Blocks имеется еще).
Акунёк вне форума Ответить с цитированием
Старый 17.03.2011, 20:27   #2
Asdprom
Форумчанин
 
Регистрация: 05.02.2011
Сообщений: 119
По умолчанию

1.http://www.gotdotnet.ru/forums/2/129328/608360/
2.
Код:
#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
    HWND handle = FindWindow("ConsoleWindowClass", NULL);
    HDC dc = GetDC(handle);
    
    Rectangle(dc, 20, 40, 100, 100);
    
    cin.get();
    return 0;
3.www.google.ru
Asdprom вне форума Ответить с цитированием
Старый 17.03.2011, 21:30   #3
Акунёк
Пользователь
 
Регистрация: 31.01.2011
Сообщений: 14
По умолчанию

Я наверно не правильно выразился..., мне нужен графический режим в консоле (SDL.h не предлагать) .
Акунёк вне форума Ответить с цитированием
Старый 17.03.2011, 22:29   #4
blacktener
Пользователь
 
Регистрация: 15.12.2010
Сообщений: 78
По умолчанию опенгл

используй опенгл. он быстро работает и там можно легко все что надо нарисовать.
blacktener вне форума Ответить с цитированием
Старый 17.03.2011, 22:39   #5
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Код:
используй опенгл
человеку консольная графика нужна, а Вы про OpenGL...
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 17.03.2011, 22:48   #6
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

В консоли - только WinAPI (если, конечно, вы под виндой). Называется все это счастье GDI (есть еще GDI+, но это немного помудреней). Пример GDI - см. пост #2, вариант #2. Только там нет ReleaseDC().
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 18.03.2011, 01:50   #7
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

http://en.wikipedia.org/wiki/Ncurses
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 18.03.2011, 02:47   #8
Psionic
Пользователь
 
Регистрация: 29.11.2008
Сообщений: 23
По умолчанию

Я бы пользовался фантазией и знаниями геометрии (я так понял человеку нужны АНСИшние художества).
Зделать как надо, и зделать так чтобы получить нужный результат - это разные вещи
Psionic вне форума Ответить с цитированием
Старый 18.03.2011, 08:39   #9
Акунёк
Пользователь
 
Регистрация: 31.01.2011
Сообщений: 14
По умолчанию

Долго уже не могу найти ответ на этот вопрос(( вот вчера увидел такой код(видимо на нам остановлюсь):
Код:
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<windows.h>
#pragma comment(lib,"winmm.lib")
const int MAX_BUFFER_SIZE=255;//максимальный размер буфера
const int MAX_POINTS=3;//кол-во точек, у нас треугольник, значит 3
const int WIDTH=640;//ширина
const int HEIGHT=300;//высота
struct sPoint//структура хранящая информацию о координате точки
{
    int x,y;//x,y - координаты
};
HWND GetConsoleHandle()//функция возвращает Handle консоли 
{
    HWND hWndResult;//результат
    char strWindowTitle[MAX_BUFFER_SIZE+1];//строка(массив символов) для хранения заголовка окна консоли
    GetConsoleTitle(strWindowTitle, MAX_BUFFER_SIZE+1);//получаем заголовок
    hWndResult=FindWindow(NULL, strWindowTitle);//узнаем handle по заголовку
    return hWndResult;//возвращаем handle
}
void InitPoints(sPoint* ArrPoint)//процедура инициализации массива точек
{
    int size=200;//размер стороны треугольника
    int h=int(sqrt(3)*size/2);//высота треугольника
    //1 точка, x - 0, y на 2/3 высоты
    ArrPoint[0].x=0;
    ArrPoint[0].y=h*2/3;
    //2 точка, x - пол стороны правее оси, y на 1/3 высоты вниз 
    ArrPoint[1].x=size/2;
    ArrPoint[1].y=-h/3;
    //3 точка, x - пол стороны левее оси, y на 1/3 высоты вниз
    ArrPoint[2].x=-size/2;
    ArrPoint[2].y=-h/3;
}
void Draw(HWND hWnd,sPoint* Point,int angle)//процедура рисует в окне с Handlom hWnd, массив точек Point под углом angle
{
    double rad=3.14*angle/180;//узнаем угол в радианах
    HDC dc=GetDC(hWnd);//получаем дескриптор устройства
    HPEN NewPen,OldPen;//NewPen - новое перо, OldPen - старое перо
    HBRUSH NewBrush,OldBrush;//NewBrush - новая кисть, OldBrush - старая кисть
    LOGBRUSH lb;//информация о кисти
    lb.lbStyle=BS_SOLID;//стиль
    lb.lbColor=RGB(0,0,0);//цвет
    lb.lbHatch=0;//неважно
    NewBrush=CreateBrushIndirect(&lb);//создаем новую кисть
    OldBrush=(HBRUSH)SelectObject(dc,NewBrush);//выбираем новую кисть
    Rectangle(dc,0,0,WIDTH,HEIGHT);//выводим прямоугольник цветом по умолчанию(pen - черный, brush - белый)
    SelectObject(dc,OldBrush);//выбираем старую кисть
    DeleteObject(NewBrush);//удаляем объект
    NewPen=CreatePen(PS_SOLID,1,RGB(255,255,255));//создаем новое перо со стилем PS_SOLID, размером 1, черного цвета 
    OldPen=(HPEN)SelectObject(dc,NewPen);//выбираем новое перо, при этом SelectObjrct возвращает старое, запоминаем его, чтобы потом восстановить
    //рисуем оси
    //горизонтальная
    //MoveToEx(dc,0,150,NULL);//курсор в (0,150)
    //LineTo(dc,640,150);//линия в (640,150)
    //MoveToEx(dc,320,0,NULL);//курсор в (320,0)
    //LineTo(dc,320,300);//линия в (320,300)
    //перемещаем курсор в первую точку массива Point с поворотом на angle
    MoveToEx(
        dc,
        WIDTH/2+int(cos(rad)*Point[0].x-sin(rad)*Point[0].y),
        HEIGHT/2-int(sin(rad)*Point[0].x+cos(rad)*Point[0].y),
        NULL);
    for(int i=1;i<MAX_POINTS;i++)//для точек со второй(с 1) до последней
        //линия в i-ую точку массива Point с поворотом
        LineTo(
            dc,
            WIDTH/2+int(cos(rad)*Point[i].x-sin(rad)*Point[i].y),
            HEIGHT/2-int(sin(rad)*Point[i].x+cos(rad)*Point[i].y));
    //линия из последней точки к первой с поворотом на angle
    LineTo(
        dc,
        WIDTH/2+int(cos(rad)*Point[0].x-sin(rad)*Point[0].y),
        HEIGHT/2-int(sin(rad)*Point[0].x+cos(rad)*Point[0].y));
    TextOut(dc,1,1,"Exit - escape",13);//выводим текст
    SelectObject(dc,OldPen);//возвращаем старое перо
    DeleteObject(NewPen);//удаляем новое перо
    ReleaseDC(hWnd,dc);//освобождаем конекст устройства
}
int main()
{
    int angle=0;//угол в градусах
    int t=timeGetTime();//узнаем текущее, ну не время, а кол-во миллисикунд прошедшее с чего-то там
    sPoint Point[MAX_POINTS];//массив точек
    HWND hWnd=GetConsoleHandle();//узнаем handle консоли
    srand(timeGetTime());//инициализация счетчика случайных чисел
    InitPoints(Point);//инициализация массива точек случайными значениями
    if(hWnd)//если не NULL
    {
        do
        if(timeGetTime()-t>20)//если прошло более 20 миллисекунд с последней перерисовки
        {
            Draw(hWnd,Point,angle);//рисуем
            t=timeGetTime();//узнаем новое значение 
            angle=++angle%360;//вычмсляем угол [0,359]
        }
        while(!GetAsyncKeyState(VK_ESCAPE)&0x0001);//пока не нажат escape    
        getch();//ждем ввода
    }
    else
    {
        cout<<"Error. Invalid console handle."<<endl;//сообщение об ошибке
    }
    return 0;
}
Это наверно и есть тот самый GDI WinAPI.
Акунёк вне форума Ответить с цитированием
Старый 18.03.2011, 11:05   #10
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Кстати, на кой чёрт тебе графика в консольном приложении? Не ищешь лёгких путей?
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод в консольном приложении Акунёк Общие вопросы C/C++ 6 16.02.2011 18:01
Проблема с ClientSocket в консольном приложении prod87 Работа с сетью в Delphi 1 18.07.2010 14:48
Использование DSPack в консольном приложении Jacobson Мультимедиа в Delphi 5 21.06.2010 05:21
Расширение экрана в консольном приложении FelixKoT Общие вопросы Delphi 1 19.02.2010 21:22