Windows与Linux下伪光标的显示实现

本文基于C语言实现。

                      Windows和Linux下伪光标移动的实现

        这是鄙人的第一篇博客,写的不是很好,所以希望各位亲们浏览时不要太苛刻,如果有什么错误的话也希望各位能指出错误微笑

       好的,现在进入正题,为什么我会突然写这篇关于Windows与Linux下伪光标移动的实现呢,这主要源于这几次做课程设计需要用到伪光标,所以学习了下伪光标移动的实现,希望能帮助到遇到伪光标移动的实现困难的小伙伴。

       首先,为什么说是伪光标呢,请看下图:

       这两幅图光标符号()的移动就属于伪光标的移动。

       我是这样认为的,我们在C语言下做的“光标移动”只是删了当前光标符号(上图),重新移动到一个位置,在输出光标符号的,也就是上图伪光标移动的实现原理,但这不是不是真正意义的光标移动;真正意义上的光标移动应该是图形位置的改变,直接将光标符号移过去。

       介绍完这个也就要真正开始讲伪光标(以下用光标代替)的显示实现了。

        Windows 下光标移动的实现

     

      这是 Windows下光标移动的展示,图为将光标移到(6,6)这个位置(在第6行第6列),然后输出Hello Windows!,具体代码实现为

 

          CROOD就是这样的一个玩意:

     typedef struct _COORD {
        SHORT X;
        SHORT Y;
    } COORD, *PCOORD

       这个结构就是记录座标位置的,

       GetStdHandle()函数获得标准输入输出的句柄,参数STD_OUTPUT_HANDLE是个宏,代表标准输出,可以看作显示器

       SetConsoleCursorPosition(hout,coord); 根据函数名称:(Set)设置(Console)控制台(Cursor)光标(Position)座标,也就是设置控制台光标座标,参数就是设备句柄,座标,那么把标准输出的句柄传给函数,就可以把光标定位在对应的位置了(左上角位置是0,0然后向左 向下延伸)

       Linux下的光标移动的实现

      


        这是 Linux下光标移动的展示,图为将光标移到(6,6)这个位置(在第6行第6列),然后输出Hello Linux!,具体代码实现为

        initscr():初始化curses库和ttty。(在开始curses编程之前,必须使用initscr()这个函数来开启curses模式)

        move(y,x): 将光标移动至 x,y 的位置.。

        printw(format,str): 类似 printf() , 以一定的格式输出。

        endwin():关闭curses并重置tty。(结束curses编程时,最后调用的一个函数)。

        当然在curses这个文件下还有其他函数可以控制输出条件,有兴趣的话可以百度一下。

        还有一点要注意的是,在编译时应加上链接语句-lcurses。

        这就是我这次博客的全部内容了,希望这篇Windows和Linux下光标移动的实现文章可以对大家有所帮助!!!

                                                                                                    ——2015年5月9日

                                                                                                                    ——小智

 

 

 

       

 

发布了20 篇原创文章 · 获赞 6 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章