我现在正在学习,我完成了这项功课:
1)如果按CTRL + L
键,所有数字符号都应改变颜色。
2)如果按下CTRL + S
键,您将获得光标左侧的单词长度。
我找到了这个函数int bioskey(int cmd);
所以现在我可以检查是否按下了键,但是如何仅更改数字符号的颜色,或者从控制台读取单词来获取它们的长度?
答案 0 :(得分:1)
我们中的一些人还记得 MS-DOS (让它安静地休息或片断......)
如果您真的在 MS-DOS ,那么您不能指望控制台的内容只会针对特定区域的颜色进行更改。你需要自己做。问题是我们对你的项目背景一无所知,所以我们不知道你的东西是什么以及如何表示,渲染/输出/输入等...
我假设使用了 EGA / VGA BIOS 文本模式,因此您可以直接访问 VRAM 。因此,您需要设置指向地址B800:0000
的指针并将其作为数组处理,其中屏幕上的每个字符都有2个BYTE。一个是颜色属性,另一个是 ASCII 代码(不确定再以哪个顺序)......
所以对于已经渲染过的东西你只是:
遍历整个屏幕
通常为80x25x2
字节
测试每个ASCII的字母数字值
所以ASCII code >= '0'
和code<='9'
代表数字,或者将您考虑的所有内容添加为code>' '
和code<='9'
等字母数字。
更改所选字符的颜色
只需更改属性字节即可。
当你把数字放在一起时,它看起来像这样:
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 ++ )