文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Windows控制台下绘制简单图形

Windows控制台下绘制简单图形

时间:2011-05-27  来源:pianoid

  最近接触到一个很有意思的问题,如何在Windows控制台下画图,翻遍了VC的头文件也没找到画图的函数,好吧,那就用Windows提供的API函数吧,看来想移植是没戏了。先画一个简单的图,类似心电图那种吧,假设得到的数据是纵坐标的值,横坐标默认从0开始,每隔512uS(微秒的那个符号不会打)得到一个纵坐标值,要求将所有纵坐标值连起来,就以这个简单的程序为例吧。

  既然有了需求,实现起来就简单了,首先我们应该有一个控制台窗口的上下文(device context)句柄,然后使用MoveToExLineTo函数连线就行了。代码如下:

  

#include <windows.h>
#include
<stdio.h>
#include
<conio.h>
#include
"data.h"  //声明了名为point的二维数组,以及记录数组元素个数的NUMBER常量

//
//下列X-Y坐标平面的值取决于控制台的尺寸,需要根据实际情况进行调整
//


//起始X坐标
#define X_START 10

//结束X坐标
#define X_END 650

//每个值的X坐标增量,相当于512uS
#define X_INC 10

//Y坐标
#define Y 250

int main()
{
HWND hwnd;
HDC hdc;
int i;

//获取console的设备上下文句柄
hwnd = GetConsoleWindow();
hdc
= GetDC(hwnd);

//调整一下console背景颜色,否则看不清线条
system("color 3D");

//起始位置,Windows中窗口的坐标系相当于直角坐标系第一象限翻转到第四象限
MoveToEx(hdc,X_START,Y,NULL);

//画基准坐标线
LineTo(hdc,X_END,Y);

//开始绘图
MoveToEx(hdc,X_START,Y,NULL);
for (i = 0; i < NUMBER; i++)
{
LineTo(hdc,point[i].x,point[i].y);
}
_getch();
return 0;
}

  但是这个程序存在一个问题,就是如果控制台被其它窗口遮住后,已经绘制的线条不会重绘,也就意味着那部分线条看不见了,只能重新运行程序,这个问题怎么解决呢?我也不知道,不过可以将整个函数包含一个while循环里,如果自己是顶层窗口就重新绘制,只是这样似乎代价太大了,呵呵。

  来看一下这个程序绘制的图形吧。

  

  既然能绘制出线条自然就可以会绘制出柱形图之类的图形,稍微修改一下就可以了,效果如下图。

  

相关阅读 更多 +
排行榜 更多 +
侏罗纪狩猎

侏罗纪狩猎

飞行射击 下载
射击瓶子

射击瓶子

飞行射击 下载
水上乐园滑行大作战最新版

水上乐园滑行大作战最新版

休闲益智 下载