免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1512 | 回复: 0
打印 上一主题 下一主题

在Ncurses开发中的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-03-24 15:46 |只看该作者 |倒序浏览
有如下一段代码:
#include <menu.h>
#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
#define CTRLD         4

char *choices[] = {
                        "Choice 1",
                        "Choice 2",
                        "Choice 3",
                        "Choice 4",
                        "Exit",
                        (char *)NULL,
                  };
void print_in_middle(WINDOW *win, int starty, int startx, int width, char *string, chtype color);

int main()
{        ITEM **my_items;
        int c;                               
        MENU *my_menu;
    WINDOW *my_menu_win;
    int n_choices, i;
       
        /* 初始化curses */
        initscr();
        start_color();
    cbreak();
    noecho();
        keypad(stdscr, TRUE);
        init_pair(1, COLOR_RED, COLOR_BLACK);

        /* 创建菜单项 */
    n_choices = ARRAY_SIZE(choices);
    my_items = (ITEM **)calloc(n_choices, sizeof(ITEM *));
    for(i = 0; i < n_choices; ++i)
                   my_items[i] = new_item(choices[i], choices[i]);

        /* 创建菜单 */
        my_menu = new_menu((ITEM **)my_items);

        /* 创建与菜单相关联的窗口*/
    my_menu_win = newwin(10, 40, 4, 4);
    keypad(my_menu_win, TRUE);

        /* 设置主窗口和子窗口 */
    set_menu_win(my_menu, my_menu_win);
    set_menu_sub(my_menu, derwin(my_menu_win, 6, 38, 3, 1));

        /* 设置字符串的标记为 " * " */
    set_menu_mark(my_menu, " * ";

        /* 在主窗口的边界打印边框线和标题 */
    box(my_menu_win, 0, 0);
        print_in_middle(my_menu_win, 1, 0, 40, "My Menu", COLOR_PAIR(1));
        mvwaddch(my_menu_win, 2, 0, ACS_LTEE);
        mvwhline(my_menu_win, 2, 1, ACS_HLINE, 3;
        mvwaddch(my_menu_win, 2, 39, ACS_RTEE);
        mvprintw(LINES - 2, 0, "F1 to exit";
        refresh();
        
        /* 递送菜单 */
        post_menu(my_menu);
        wrefresh(my_menu_win);

        while((c = wgetch(my_menu_win)) != KEY_F(1))
        {       switch(c)
                {        case KEY_DOWN:
                                menu_driver(my_menu, REQ_DOWN_ITEM);
                                break;
                                case KEY_UP:
                                menu_driver(my_menu, REQ_UP_ITEM);
                                break;
                        }
            wrefresh(my_menu_win);
        }       

        /* 取消递送并释放占用的内存 */
    unpost_menu(my_menu);
    free_menu(my_menu);
    for(i = 0; i < n_choices; ++i)
    free_item(my_items[i]);
        endwin();
}

void print_in_middle(WINDOW *win, int starty, int startx, int width, char *string, chtype color)
{        int length, x, y;
        float temp;

        if(win == NULL)
                win = stdscr;
        getyx(win, y, x);
        if(startx != 0)
                x = startx;
        if(starty != 0)
                y = starty;
        if(width == 0)
                width = 80;

        length = strlen(string);
        temp = (width - length)/ 2;
        x = startx + (int)temp;
        wattron(win, color);
        mvwprintw(win, y, x, "%s", string);
        wattroff(win, color);
        refresh();
}
通过gcc 1.c -lmenu -lncurses编译出来能正常工作.如果把
char *choices[] = {
                        "Choice 1",
                        "Choice 2",
                        "Choice 3",
                        "Choice 4",
                        "Exit",
                        (char *)NULL,
                  };
换成中文后能编译出来,但显示不出来,函数new_item返回为NULL,没有创建起ITEM.errno 为-2,能不能请那为老师指点一下,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP