不错,利用GDI API,居然可以做到这个效果,我都没想到过
还在怀念TC2.0时代的BGI和INT10H绘图?其实VC也可以做到!
不需要创建任何窗口,可以直接在控制台窗口上画图。
主要函数:
注意GetDC完一定要ReleaseDC,CreateXXX之后一定要DeleteObject,不要造成资源泄露。
如果需要处理键盘输入,可以#include <conio.h>用kbhit()和getch()函数。
<code class="language-cpp">// main.cpp #undef UNICODE #include <windows.h> #include <conio.h> int main() { // 隐藏光标 CONSOLE_CURSOR_INFO curinfo = { sizeof curinfo, FALSE }; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &curinfo); // 获取控制台窗口句柄 HWND hwnd = GetForegroundWindow(); // 循环绘图 while (TRUE) { // 获取绘图句柄 HDC hdc = GetDC(hwnd); //获取客户区大小 RECT rc; GetClientRect(hwnd, &rc); // 清屏 FillRect(hdc, &rc, (HBRUSH)GetStockObject(WHITE_BRUSH)); // 进行其它绘图命令 // 设置背景透明 SetBkMode(hdc, TRANSPARENT); // 选择透明画刷 SelectObject(hdc, GetStockObject(NULL_BRUSH)); // 选择TrueType字体 SelectObject(hdc, GetStockObject(DEFAULT_GUI_FONT)); // 创建画笔对象 HPEN greenpen = CreatePen(PS_SOLID, 2, RGB(0, 255, 0)); HPEN bluepen = CreatePen(PS_SOLID, 2, RGB(0, 0, 255)); // 绘制红色文字 SetTextColor(hdc, RGB(255, 0, 0)); TextOut(hdc, 10, 10, "我是字符串", 10); // 绘制绿色椭圆 static POINT origin = { 10, 10 }; SelectObject(hdc, greenpen); Ellipse(hdc, origin.x, origin.y, origin.x + 90, origin.y + 150); // 绘制蓝色矩形 SelectObject(hdc, bluepen); Rectangle(hdc, 20, 50, 120, 100); // 销毁画笔对象 DeleteObject(greenpen); DeleteObject(bluepen); // 释放绘图句柄并清空命令列表 ReleaseDC(hwnd, hdc); // 检测按键 if (kbhit()) { // 响应按键 int ch = getch(); if (ch == 'a') origin.x -= 5; if (ch == 'w') origin.y -= 5; if (ch == 's') origin.y += 5; if (ch == 'd') origin.x += 5; } else { // 稳定刷新率 Sleep(20); } } return 0; } </conio.h></windows.h></code>
[修改于 7年10个月前 - 2017/02/27 17:27:34]
时段 | 个数 |
---|---|
{{f.startingTime}}点 - {{f.endTime}}点 | {{f.fileCount}} |
200字以内,仅用于支线交流,主线讨论请采用回复功能。