LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 799|回复: 4

关于curses,怎么使用上下箭头给光标定位?

[复制链接]
发表于 2004-8-18 14:38:39 | 显示全部楼层 |阅读模式
下面是一个遍历目录,找出MP3文件,显示到curses窗口中,想实现上下箭头进行选择,但就是不成功啊!
那位高手帮忙看看!!!
源码:
-----------------------------------
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <ftw.h>
#include <string.h>
#include <curses.h>
WINDOW *_mp3_list;
int i=1;
//遍历目录树,找出mp3文件,并显示到curses窗口中
int fn (const char *file,const struct stat *sb,int flag)
{
        if ((flag ==FTW_F)&&(strcmp("mp3",(file+(strlen(file)-3)))==0))
                {
                        FILE *stream;
                        long offset;
                        fpos_t pos;
                        char c1,c2;
                        char buffer[125]={0};
                        stream=fopen(file,"r");
                        fseek(stream,-125,SEEK_END);
                        fread(buffer,125,1,stream);
         //显示每一mp3文件信息到curses窗口中
                        mvwaddstr(_mp3_list,i++,11,buffer);
                        refresh();
                        wrefresh(_mp3_list);
                }
return 0;
}
main(){
        int ch;
        system("clear");
        initscr();
        _mp3_list=newwin(20,50,0,0);
        keypad(_mp3_list,TRUE);
        ftw("/home/cooler/",fn,500);
        int j=1;
        move(1,11);
        cbreak();
        noecho();
        while(1)
        {
                ch=getch();
                if(ch==KEY_DOWN&&j<i)
                {
                        move(++j,11);
                        refresh();
                        wrefresh(_mp3_list);
                }
                if(ch==KEY_UP&&j!=1)
                {
                        move(--j,11);
                                refresh();
                        wrefresh(_mp3_list);
                }
                if(ch==KEY_DOWN&&j==i)
                {
                        move(1,11);
                                refresh();
                        wrefresh(_mp3_list);
                }
                if(ch==KEY_UP&&j==1)
                {
                        move(i,11);
                               refresh();
                        wrefresh(_mp3_list);
                }
        }
        endwin();
}
-----------------------------------
发表于 2004-8-18 15:51:20 | 显示全部楼层
你的程序还没能显示搜索到的mp3文件呢。
 楼主| 发表于 2004-8-18 16:37:54 | 显示全部楼层
能将/home/cooler/下的mp3显示
这是可以的
cusers是因为要用到光标,才学的,调试了半天,这就是过不去


源码:
------------------------------
while(1)
{
ch=getch();
if(ch==KEY_DOWN&&j<i)
{
move(++j,11);
refresh();
wrefresh(_mp3_list);
}
if(ch==KEY_UP&&j!=1)
{
move(--j,11);
refresh();
wrefresh(_mp3_list);
}
if(ch==KEY_DOWN&&j==i)
{
move(1,11);
refresh();
wrefresh(_mp3_list);
}
if(ch==KEY_UP&&j==1)
{
move(i,11);
refresh();
wrefresh(_mp3_list);
}
}
endwin();
}
--------------------------
发表于 2004-8-19 12:43:25 | 显示全部楼层
在我这可什么都出不来呀,即使光条用不了也应该显示一些文本吧,目录下可用touch建立了很多测试用的*.mp3文件。

我的curses编程书不知放到哪去了,找到的话再帮你看看啦。
 楼主| 发表于 2004-8-19 14:25:42 | 显示全部楼层
谢谢了
这是我显示出来的贴图。
把ftw()中的/home/cooler/
改为你的存mp3的路径就应该可以了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表