| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 735 人关注过本帖, 1 人收藏
标题:upbar()函数实现代码求解...
只看楼主 加入收藏
我的节拍
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2009-9-14
结帖率:90%
收藏(1)
已结贴  问题点数:15 回复次数:5 
upbar()函数实现代码求解...
upbar(int y)
{
int i;
typedef struct texel_stuct    问题1, (经常可以看到“_”,比如KEY_UP这个作用是?有实质意义么?)
{
unsigned char ch;
unsigned char attr;
}texel;
texel t;
for(i=9;i<=17;i++)
{
gettext(i,y,i,y,&t);
t.attr=0x1f;                      问题2,(为什么到了这一步,书上说:字符为白色,背景为蓝色?这一步我整个看不懂?)
puttext(i,y,i,y,&t);               
gettext(i,y+1,i,y+1,&t);
t.attr=0x4f;                     同问题2,(为什么到了这一步,书上说:字符为白色,背景为红色?)
puttext(i,y+1,i,y+1,&t);
};
gotoxy(3,y+1);
return;
}


谢谢达人帮忙,如果可以解释麻烦详细点...
搜索更多相关主题的帖子: upbar 代码 求解 函数 
2009-09-21 22:59
小J
Rank: 8Rank: 8
等 级:等待验证会员
威 望:1
帖 子:282
专家分:704
注 册:2009-6-18
收藏
得分:1 
不懂,关注中……
2009-09-21 23:03
Kabie
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:69
专家分:185
注 册:2009-8-21
收藏
得分:2 
_就是为了让变量和函数名更易读的么。。。linux编码风格通常拒绝大小写混用。。

至于这个代码。。。你最好先读读书上这个例子之前都讲了啥。。。。gettext和puttext这两个函数都是干啥的。。。
2009-09-22 00:37
chenaiyuxue
Rank: 5Rank: 5
来 自:山东滨州
等 级:职业侠客
帖 子:334
专家分:370
注 册:2008-5-20
收藏
得分:9 
问题1:“_”并没有实质的作用,C语言规定变量名中可以使用下划线。一般使用下划线都是为了使变量名的意义更直观、易懂。
问题2,3:这个涉及到文本模式下视频缓冲区的格式。一个字符在视频缓冲区里占两个字节,第一个字节存的是显示字符的ASCII码ch;第二个字节attr的低四位是字符的颜色,也就是前景色,高三位是背景色,最高位表示字符是否闪烁。
0000 黑色
0001 蓝色
0010 绿色
0011 青色
0100 红色
0101 洋红
0110 棕色
0111 白色
1000 灰色
1001 亮蓝色
1010 亮绿色
1011 亮青色
1100 亮红色
1101 亮洋红
1110 黄色
1111 亮白色
所以t.attr = 0x1f表示字符颜色为亮白色,背景色为蓝色,字符不闪烁
    t.arrt = 0x4f表示字符颜色为亮白色,背景色为红色,字符不闪烁

你是雪,我是尘埃,相遇是意外;你坠落,在我胸怀,流进我血脉。
2009-09-22 10:25
beyond_one
Rank: 4
等 级:业余侠客
帖 子:61
专家分:206
注 册:2009-6-26
收藏
得分:3 
int gettext(int xl, int yl, int x2, int y2, void *buffer);
 
该函数将把左上角为(xl,y1),右下角为(x2,y2)的屏幕矩形区内的文本存到由指针buffer
指向的一个内存缓冲区内,当操作成功,返回1;否则,返回0。
因一个在屏幕上显示的字符需占显示存储器VRAM 的两个字节,即第一个字节是该字
符的ASCII 码,第二个字节为属性字节,即表示其显示的前景、背景色及是否闪烁,所以
buffer 指向的内存缓冲区的字节总数的计算为:
字节总数=矩形内行数×每行列数×2
其中:矩形内行数=y2-y1+l,每行列数=x2-xl+1(每行列数是指矩形内每行的列数)。矩形内
文本字符在缓冲区内存放的次序是从左到右,从上到下,每个字符占连续两个字节并依次存
放。

int puttext(int x1, int y1, int x2, int y2, void *buffer);

该函数则是将gettext()函数存入内存buffer 中的文字内容拷贝到屏幕上指定的位置。
注意:
(1) gettext()函数和puttext()函数中的坐标是对整个屏幕而言的,即是屏幕的绝对坐标,而
不是相对窗口的坐标;
(2) movetext()函数是拷贝而不是移动窗口区域内容,即使用该函数后,原位置区域的文本
内容仍然存在。

2009-09-22 10:42
我的节拍
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2009-9-14
收藏
得分:0 
感谢各位热心的前辈...
5楼虽然答的不是我问的不过对我也有帮助...
2009-09-22 13:21
快速回复:upbar()函数实现代码求解...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015713 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved