有时我需要在屏幕上的位置(例如:第10列和第20行)写东西。我在网上搜索,发现它使用Windows处理程序使用windows.h完成。,在不使用窗口句柄的情况下更改光标位置。 Qbasic模仿缓慢
是的,使用句柄很快但有点复杂,所以我编写了一个只使用printf(字符串)的类,并以适合屏幕的方式更改字符串,并且每个printf命令都填充整个80x24控制台屏幕。该类模仿QBasic的CLS,LOCATE x,y和PRINT命令。
问题:有没有一种更简单的方法来达到屏幕上的任何位置,并把一个字符或点(绘图),而不使用窗口句柄或像我这样的缓慢的类?
我的QBASIC类是这么慢,我可以用它每秒只有几次。 VC++ 10.0 windows XP
谢谢你的时间。
这是我的阶级和一些例子:
// print_test.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
class QBASIC
{
public:
QBASIC()
{
for(int i=0;i<(80*23);i++)
{
default_fill[i]=' ';
current_fill[i]=' ';
}
default_fill[80*23]=NULL;
current_fill[80*23]=NULL;
row=0;
column=0;
window_number=0;
}
void locate(int x,int y)
{
row=y;
column=x;
return;
}
void print(char* text)
{
int length=strlen(text);
for(int i=0;i<length;i++)
{
current_fill[row*80+column+i]=text[i];
}
row++;
column=0;
printf("%s",current_fill);
return;
}
void cls()
{
for(int i=0;i<(80*24);i++)
{
current_fill[i]=default_fill[i];
}
column=0;
row=0;
printf("%s",current_fill);
}
void window(int x1,int y1,int x2,int y2,char*text,int id)
{
//178 wall code
window_buffer[window_number]=new unsigned char[1000];
window_number++;
for(int i=x1;i<(x2+1);i++)
{
current_fill[i+80*y1]=178;
current_fill[i+80*y2]=178;
}
for(int j=y1;j<(y2+1);j++)
{
current_fill[x1+80*j]=178;
current_fill[x2+80*j]=178;
}
int length=strlen(text);int temp_row=0;int temp_column=0;
for(int i=0;i<length;i++)
{
if(current_fill[(x1+1+temp_column)+(y1+1+temp_row)*80+i]!=178)
{
current_fill[(x1+1+temp_column)+(y1+1+temp_row)*80+i]=text[i];
}
else
{
temp_row++;
temp_column=-i;
current_fill[(x1+1+temp_column)+(y1+1+temp_row)*80+i]=text[i];
}
}
printf("%s",current_fill);
return;
}
private:
unsigned char default_fill[80*23+1000];
unsigned char current_fill[80*23+1000];
int row,column;
unsigned char *window_buffer[10];//max windows number=10
int window_number;
};
int main()
{
QBASIC *mimic=new QBASIC();
mimic->cls();
mimic->locate(25,10);
mimic->print("x <--here is 26th column and 11th row");
mimic->locate(5,4);
mimic->print("x <--here is 6th column and 5th row");
mimic->locate(0,0);
mimic->print("x <--here is origin");
mimic->print("x <--here is sequantial print after");
mimic->print("x <--here is another");
int window_id_1=0,window_id_2=1;
mimic->window(20,5,28,9,"this is a window",window_id_1);
mimic->window(10,18,70,22,"this is another window from 10,18 to 70,22",window_id_2);
delete mimic;
getchar();// waiting to see the screen before exiting. press enter to continue
return 0;
}
我认为世界上没有其他的解决方案。
是不是有人知道qbasic或一些简单的绘图命令在c + +? – 2012-08-04 12:46:59