#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;
}
Работа с графикой в консольных приложениях
Я только недавно начал осваивать Си, пытаюсь создавать консольные приложения в Visual C++ 6. Не могу найти функции для работы с графикой. В примерах используется graphics.h, но компилятор его не находит. Может, graphics является не стандратной библиотекой, а расширением? Подскажите, что можно использовать
Не можешь найти, потому что графика на основе BGI это чисто Борландовская разработка, и в Студии её быть просто не может. Поэтому тебе дорога либо в Borland C++ 3.x, либо в Borland C++ 5.x
На крайний случай GDI.
...не поддерживают графический режим.
#include <windows.h>
int main(int argc, _TCHAR* argv[])
{
HWND hwnd = GetConsoleWindow();
HDC hdc = GetDC(hwnd);
// рисовать
ReleaseDC(hwnd, hdc);
return 0;
}
P.S. Шучу я так...
#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
:)
А что им собственно мешает? =))
Недавно пробегал по одному форуму, не помню какому, там вроде и пример был и скриншотик даже. Только шутка это или нет - не сказано. Я внимание не заострял, не до того было. Скорее всего (если это, вообще, возможно) обычными API средствами этого не добиться.
P.S. Интересно, что скажут мэтры?
P.S. Интересно, что скажут мэтры?[/QUOTE]
Не надо быть мэтром, чтобы проверить такую возможность. И добиваться тут нечего - функции API в общем и целом успешно работают. В следующей программе по нажатию любой клавиши (за исключением Esc) в консольном окне рисуется красный квадрат, смещённый вправо и вниз относительно предыдущего.
Код:
Интересно, что функция GetDC не срабатывает, а GetWindowDC - пожалуйста (Windows 98). Может быть, потому, что "область белого текста на чёрном фоне" - дочернее окно, так что клиентская часть основного окна просто перекрыта им. Работоспособную программу удалось собрать в LCC - Builder здесь пасует. Если хотите проверить, как это работает, запускайте скомпилированную программу отдельно, а не из среды программирования.
Но всё это никакого практического значения не имеет. Консольные приложения расчитаны на то, что они корректно работают как в окне, так и в текстовом режиме монитора. Естественно все эти прорисовки в последнем случае видны не будут.
Такие как DirectX, OpenGL?
От чего ушли, к тому же и возвращаемся?
Такие как DirectX, OpenGL?
От чего ушли, к тому же и возвращаемся?[/QUOTE]
Ну и при чем тут это? Это просто эксперимент. ShadyMan же написал, что это не носит практического характера. И DirectX с OpenGL предназначены для немного других целей, нежели библиотека graphics для Borland. Действительно, наиболее близок к ней - GDI.
Короче, HunterHank! Твой путь лежит в GDI. :)
Большое спасибо за обстоятельные ответы. Вопрос такой возник только потому, что я осваиваю пока только Си. Кстати, я так понял, что если говорить о графике, то преимуществ какого-либо компилятора нет, все равно все решается через GDI, DirectX или OpenGL?
Если говорить о приложениях с простейшей графикой, то да. Компилятор С++ в MS Visual Studio 6.0 - вполне приличная вещь. Особенно для начинающего (имеется ввиду среда).