Borland c ++控制台功能

时间:2016-11-07 19:29:08

标签: c++ dos turbo-c++ borland-c++ borland-c

我现在正在学习,我完成了这项功课:

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

2)如果按下CTRL + S键,您将获得光标左侧的单词长度。

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

1 个答案:

答案 0 :(得分:1)

我们中的一些人还记得 MS-DOS (让它安静地休息或片断......)

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

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

所以对于已经渲染过的东西你只是:

  1. 遍历整个屏幕

    通常为80x25x2字节

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

    所以ASCII code >= '0'code<='9'代表数字,或者将您考虑的所有内容添加为code>' 'code<='9'等字母数字。

  3. 更改所选字符的颜色

    只需更改属性字节即可。

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

    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&#39>:

    如果您对CTRL+Key检测有问题,不确定 TC ++ 中的内置功能是否允许CTRL(很久以前),那么您可以利用 BIOS 甚至连接键盘 ISR 。查看键盘处理程序存在的 ISR 的第二个链接...您可以将其移植到 C ++ 或google那里必须有很多示例,尤其是 TP7.0 (这是pascal但很容易移植到 TC ++