Borland C++ 控制台函数

Borland c++ console functions

我现在正在学习,我有这个作业/任务要做:

1) 如果按CTRL + L键,所有数字符号都应该改变颜色。

2) 如果你按CTRL + S键,你会得到从光标左边的单词的长度。

我找到了这个函数int bioskey(int cmd); 所以现在我可以检查是否按下了键,但是如何只更改数字符号的颜色,或者从控制台读取单词以获得它们的长度?

我们中的一些人还记得 MS-DOS(让它安息吧,否则就碎了...)

如果您真的在 MS-DOS 下,那么您不能指望控制台的内容只会针对特定区域更改颜色。你需要自己做。问题是我们对你的项目背景一无所知,所以我们不知道你的东西是什么以及如何表示,rendered/outputed/inputed 等...

我假设使用 EGA/VGA BIOS 文本模式,这样您就可以直接访问 VRAM。因此,您需要将指针设置为地址 B800:0000 并将其作为数组处理,其中屏幕上的每个字符都有 2 个字节。一个是颜色属性,另一个是 ASCII 码(不知道是哪个顺序了)...

因此,对于已经渲染的内容,您只需:

  1. 循环整个屏幕

    通常 80x25x2 字节

  2. 测试每个 ASCII 的字母数字值

    所以 ASCII code >= '0'code<='9' 用于数字,或者添加所有您考虑作为字母数字的东西,例如 code>' 'code<='9'.

  3. 更改所选字符的颜色

    只需更改属性字节即可。

当你把它放在一起作为数字时,它看起来像这样:

char far *scr=(char far*)0x0B0000000;
int x,y,a;
for (a=0,y=0;y<25;y++)
 for (x=0;x<80;x++,a+=2)
  if ((scr[a+0]>='0')&&((scr[a+0]<='9'))
  {
  scr[a+1]=7; //attribute with the different color here
  }

如果它不起作用,请尝试交换 scr[a+0]scr[a+1]。如果发生异常,那么您不在 MS-DOS 中并且您无权访问 VRAM。在那种情况下,使用 DOS-BOX 或允许访问内存的驱动程序,如 dllportio ... 有关详细信息,请参阅一些或多或少相关的 QA:

  • Display an array of color in C

如果您在 CTRL+Key 检测中遇到问题,不确定 TC++ 中的内置函数是否允许 CTRL(太久以前了),那么您可以利用 BIOS 甚至连接键盘 ISR。请参阅第二个 link,其中存在用于键盘处理程序的 ISR...您可以将其移植到 C++ 或 google 肯定有很多例子,尤其是 TP7.0(它是 Pascal,但很容易移植到 TC++