Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с графикой в консольных приложениях

21K
15 октября 2006 года
HunterHank
3 / / 14.10.2006
Я только недавно начал осваивать Си, пытаюсь создавать консольные приложения в Visual C++ 6. Не могу найти функции для работы с графикой. В примерах используется graphics.h, но компилятор его не находит. Может, graphics является не стандратной библиотекой, а расширением? Подскажите, что можно использовать
21K
15 октября 2006 года
Nuller_
6 / / 06.10.2006
Не можешь найти, потому что графика на основе BGI это чисто Борландовская разработка, и в Студии её быть просто не может. Поэтому тебе дорога либо в Borland C++ 3.x, либо в Borland C++ 5.x
533
15 октября 2006 года
Visualex
254 / / 07.01.2005
Да графика в консоли по-моему это каменный век, лучше уже осваивать DirectX или OpenGL.
На крайний случай GDI.
10K
15 октября 2006 года
Kalastiuz
21 / / 14.07.2005
[QUOTE=HunterHank]консольные приложения в Visual C++ 6...[/QUOTE]
...не поддерживают графический режим.
9
15 октября 2006 года
Lerkin
3.0K / / 25.03.2003
#define _WIN32_WINNT 0x0500
#include <windows.h>

int main(int argc, _TCHAR* argv[])
{
HWND hwnd = GetConsoleWindow();
HDC hdc = GetDC(hwnd);


// рисовать

ReleaseDC(hwnd, hdc);

return 0;
}

P.S. Шучу я так...
12K
15 октября 2006 года
rjx
55 / / 11.03.2006
[QUOTE=Lerkin]#define _WIN32_WINNT 0x0500
#include <windows.h>

int main(int argc, _TCHAR* argv[])
{
HWND hwnd = GetConsoleWindow();
HDC hdc = GetDC(hwnd);


// рисовать

ReleaseDC(hwnd, hdc);

return 0;
}

P.S. Шучу я так...[/QUOTE]

+1
:)
240
16 октября 2006 года
aks
2.5K / / 14.07.2006
[QUOTE=Kalastiuz]...не поддерживают графический режим.[/QUOTE]
А что им собственно мешает? =))
9
16 октября 2006 года
Lerkin
3.0K / / 25.03.2003
Кстати, а серьёзно. Консоль - такое же окно. Наверное у него и HWND есть и DC можно получить...
Недавно пробегал по одному форуму, не помню какому, там вроде и пример был и скриншотик даже. Только шутка это или нет - не сказано. Я внимание не заострял, не до того было. Скорее всего (если это, вообще, возможно) обычными API средствами этого не добиться.
P.S. Интересно, что скажут мэтры?
3.3K
16 октября 2006 года
ShadyMan
191 / / 15.07.2006
[QUOTE=Lerkin]Скорее всего (если это, вообще, возможно) обычными API средствами этого не добиться.
P.S. Интересно, что скажут мэтры?[/QUOTE]
Не надо быть мэтром, чтобы проверить такую возможность. И добиваться тут нечего - функции API в общем и целом успешно работают. В следующей программе по нажатию любой клавиши (за исключением Esc) в консольном окне рисуется красный квадрат, смещённый вправо и вниз относительно предыдущего.
Код:
#include <windows.h>
#include <conio.h>

int main(void)
{
 char szTitle[80];
 HWND hWnd;
 HDC hDC;
 HBRUSH hBrush=CreateSolidBrush(0x0000ff);
 RECT rect={100, 100, 200, 200};
 GetConsoleTitle(szTitle, 80);        //Найти функцию для прямого получения
 hWnd=FindWindow(NULL, szTitle);  //хэндла консоли я не смог
 if (hWnd)
 {
  do
  {
   hDC=GetWindowDC(hWnd);
   FillRect(hDC, &rect, hBrush);
   ReleaseDC(hWnd, hDC);
   rect.top++;
   rect.bottom++;
   rect.left++;
   rect.right++;
  }
  while (getch()!=27);
 }
 return 0;
}

Интересно, что функция GetDC не срабатывает, а GetWindowDC - пожалуйста (Windows 98). Может быть, потому, что "область белого текста на чёрном фоне" - дочернее окно, так что клиентская часть основного окна просто перекрыта им. Работоспособную программу удалось собрать в LCC - Builder здесь пасует. Если хотите проверить, как это работает, запускайте скомпилированную программу отдельно, а не из среды программирования.
Но всё это никакого практического значения не имеет. Консольные приложения расчитаны на то, что они корректно работают как в окне, так и в текстовом режиме монитора. Естественно все эти прорисовки в последнем случае видны не будут.
533
16 октября 2006 года
Visualex
254 / / 07.01.2005
Если в консоли выводить графику, зачем тогда графические библиотеки?
Такие как DirectX, OpenGL?
От чего ушли, к тому же и возвращаемся?
9
16 октября 2006 года
Lerkin
3.0K / / 25.03.2003
[QUOTE=Visualex]Если в консоли выводить графику, зачем тогда графические библиотеки?
Такие как DirectX, OpenGL?
От чего ушли, к тому же и возвращаемся?[/QUOTE]

Ну и при чем тут это? Это просто эксперимент. ShadyMan же написал, что это не носит практического характера. И DirectX с OpenGL предназначены для немного других целей, нежели библиотека graphics для Borland. Действительно, наиболее близок к ней - GDI.
Короче, HunterHank! Твой путь лежит в GDI. :)
21K
17 октября 2006 года
HunterHank
3 / / 14.10.2006
Большое спасибо за обстоятельные ответы. Вопрос такой возник только потому, что я осваиваю пока только Си. Кстати, я так понял, что если говорить о графике, то преимуществ какого-либо компилятора нет, все равно все решается через GDI, DirectX или OpenGL?
9
18 октября 2006 года
Lerkin
3.0K / / 25.03.2003
[QUOTE=HunterHank]Большое спасибо за обстоятельные ответы. Вопрос такой возник только потому, что я осваиваю пока только Си. Кстати, я так понял, что если говорить о графике, то преимуществ какого-либо компилятора нет, все равно все решается через GDI, DirectX или OpenGL?[/QUOTE]

Если говорить о приложениях с простейшей графикой, то да. Компилятор С++ в MS Visual Studio 6.0 - вполне приличная вещь. Особенно для начинающего (имеется ввиду среда).
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог