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 码(不知道是哪个顺序了)...
因此,对于已经渲染的内容,您只需:
循环整个屏幕
通常 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:
- Display an array of color in C
如果您在 CTRL+Key
检测中遇到问题,不确定 TC++ 中的内置函数是否允许 CTRL
(太久以前了),那么您可以利用 BIOS 甚至连接键盘 ISR。请参阅第二个 link,其中存在用于键盘处理程序的 ISR...您可以将其移植到 C++ 或 google 肯定有很多例子,尤其是 TP7.0(它是 Pascal,但很容易移植到 TC++)
我现在正在学习,我有这个作业/任务要做:
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 码(不知道是哪个顺序了)...
因此,对于已经渲染的内容,您只需:
循环整个屏幕
通常
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:
- Display an array of color in C
如果您在 CTRL+Key
检测中遇到问题,不确定 TC++ 中的内置函数是否允许 CTRL
(太久以前了),那么您可以利用 BIOS 甚至连接键盘 ISR。请参阅第二个 link,其中存在用于键盘处理程序的 ISR...您可以将其移植到 C++ 或 google 肯定有很多例子,尤其是 TP7.0(它是 Pascal,但很容易移植到 TC++)