| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 782 人关注过本帖
标题:VC 下 gotoxy()函数能不能与 graphics.h 中的函数公用
只看楼主 加入收藏
少林小和尚
Rank: 2
等 级:论坛游民
帖 子:57
专家分:26
注 册:2013-3-31
结帖率:73.68%
收藏
已结贴  问题点数:20 回复次数:8 
VC 下 gotoxy()函数能不能与 graphics.h 中的函数公用
VC下装上easyX后,gotoxy()函数的坐标指定为什么不能与graphics.h中的函数画出的图形显示在一个dos界面下???gotoxy()函数时物理坐标 ,graphics.h头文件中的是画图函数时逻辑坐标,两者之间能不能转化??
代码如下:
#include<stdio.h>
#include<windows.h>
#include<conio.h>
#include<graphics.h>
void gotoxy(HANDLE hOut,int x,int y)
{
    COORD loc;
    loc.X=x;
    loc.Y=y;
    SetConsoleCursorPosition(hOut,loc);
}

void face()
{
    int gdriver=DETECT,gmode;
    initgraph(&gdriver,&gmode," ");
    rectangle(50,30,100,150);
}
void help_inf()
{
    HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
    gotoxy(hOut,60,10);
    printf("asdan");
    gotoxy(hOut,100,50);
    printf("**********:\n");
    gotoxy(hOut,100,80);      
    printf("**********\n");

}
int main()
{
    face();
    help_inf();
    getch();
    return 0;
}

求大神!!!!!!
搜索更多相关主题的帖子: include 
2014-07-14 20:47
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
gotoxy()是文本模式下的函数,定位光标到文本位置,其位置是文本行和列的数值,而graphics头是图形模式下的坐标位置,其值是屏幕上的像素点坐标。通常在没改变文本字符大小的情况下,文本字符的尺寸是8*16的矩阵图案,也就是说,常规的25行80列文本屏幕,对应640*400的图形屏幕。文本光标是以文本字符的尺寸跳跃的,即只能横向移动8n像素、纵向移动16n像素,而图形模式下的绘图点坐标却是可以取任意自然数的。要找对应和转换关系,按这个原理思考即可。

授人以渔,不授人以鱼。
2014-07-14 20:57
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
通常,在图形模式下编程,不需要再用文本模式的操作。要显示字符文字,有图形模式下在任意坐标输出字符串的函数,不必局限在文本模式下的那些行列坐标,亦即你的文字可以显示在文本模式下无法显示的地方,而且,图形模式下的文字,是可以调节字型和大小的(文本的不行)。文本和图形混合编程,不会给你带来方便,很简单的清屏动作你就得做两遍。

授人以渔,不授人以鱼。
2014-07-14 21:07
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
文本态的屏幕,其实就是特定的图形屏幕,其限制规矩和标准尺寸比自由模式下的图形要多,不用考虑更多更复杂的东西,所以人家才说学编程从文本(控制台)模式开始,为的就是降低复杂性。事实上,对文本模式的编程,也比图形态轻松得多——凡是有固定限制的东西,都是这样,比如苹果的设备,其尺寸和指数基本上是硬性规定的,在那些设备上编程当然不需考虑更多的可变性,它才会高效。

授人以渔,不授人以鱼。
2014-07-14 21:12
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
简单的类比,文本模式下的输入输出,相当于在方格本上写字;而图形模式下的输入输出,就是在一张白纸上绘图和写字;文本模式是在白纸上事先画好了框框。其间的区别与联系,用这个模型来看就知道了。

授人以渔,不授人以鱼。
2014-07-14 21:26
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
英文(或ASCII)字符在文本模式下的输出,是8*16点阵图案,而汉字是16*16点阵图案,故一个汉字占两个ASCII字符的空间!在文本模式下涉及汉字的处理,要区分字符是汉字还是普通ASCII字符,光标移动的距离是需要相应调整的(连内码的处理也要这样区分),故比较复杂。

授人以渔,不授人以鱼。
2014-07-14 21:31
少林小和尚
Rank: 2
等 级:论坛游民
帖 子:57
专家分:26
注 册:2013-3-31
收藏
得分:0 
回复 6 楼 TonyDeng
多谢大神详细的解答  
2014-07-15 09:25
三个人
Rank: 2
等 级:论坛游民
帖 子:54
专家分:40
注 册:2014-7-6
收藏
得分:10 
2014-07-15 13:54
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
在DOS时代,TC/BC的conio头是直接写屏的,它的速度飞快,但有一个缺陷,即不能在图形态下使用,因为文本模式和图形模式的显示卡内存入口地址不一样,硬件操作方式也不一样——但是微软的MSC库中conio头(对应gotoxy()的是settextposition())却可以,因为它不是直接写屏的,而是调用系统中断的。Graphics头被移植到Windows后,可能修改了方式,可以兼容了,不过,肯定变慢了。TC/BC之所以在那个时代风行一时,就是因为它的速度飞快,不愧Turbo字眼,但须知那是有代价的,就是它依赖于直接操纵硬件,欠缺兼容性。

那个时候的中文系统,就是用汇编写一段内存驻留程序,拦截TC/BC的直接写屏,改为用系统中断,让中文系统程序接管输出,在图形态下输出信息,从而把英文操作系统改为中文的。更有进一步的,把高位ASCII制表符拦截了,改为图形态下中文可以显示的表格符而非中文乱码。

[ 本帖最后由 TonyDeng 于 2014-7-15 15:58 编辑 ]

授人以渔,不授人以鱼。
2014-07-15 15:44
快速回复:VC 下 gotoxy()函数能不能与 graphics.h 中的函数公用
数据加载中...
 
   



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

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