下边这个程序哪里错了呀~~运行时画不出图来!!

#include<ncurses.h>
int main()
{
initscr();
WINDOW *win;
win=newwin(11,11,'|','-');
getch();
endwin();
}
错了~~~程序应该是这样~~
#include<ncurses.h>
int main()
{
initscr();
WINDOW *win;
win=newwin(11,11,1,1);
box(win,'|','-');
getch();
endwin();
}
这样运行的时候也不画图~~~

郎朗坤
浏览 115回答 2
2回答

森栏

理解怎么样用API来编程.你应该能熟练的运用API来编程.你就会少很多的困惑.亲手写一个API的窗口程序吧!别的不罗嗦了,现在给你解释一下:资源:这个名字已经很清楚了,就是材料,是构建你想要的"窗口"的材料.(当然不只是窗口,还有光标,BIM图...)就象你要造一个"红色的门",那些木头,红漆呀就是资源.当然,在MFC中,MFC已经给我们造好一个"门",只是这个门没有颜色(或者就默认的颜色),你要做的就是把这个"门"拿来(这里的门,也是你的资源),你自己可以刷上红漆,就是你想要的"红门"了.如果你不想要MFC帮你做的门,你可以自己用一些最基本的资源来做这个门了.消息:学WINDOWS编程,你应该知道,WINDOWS是消息驱动的.就是说,在他的WinMain函数中,在建立窗口时,会有一个窗口处理函数,在这个窗口处理函数中会有一个消息处理函数,这个消息处理函数是一直在循环的.在循环体内用switch语句来处理不同的消息.形式就如同:while(1){switch(nMsg){case WM_LBUTTONDOWN:{//处理动作....}break;case WM_RBUTTONDOWN:break;case WM_USER+1:break;case WM_USER+2:break;default;}}消息,其实就是你定义的一个"事件"的参数(当然你也可以自己定义).通过2个函数投递到应用程序的消息队列中.(SendMessage和PostMessage.)消息响应函数:很明显了,就是用来响应消息的函数.这里牵涉到一个"消息映射"的概念,在MFC中,你可以看到ON_MESSAGE(...)这样的形式,就是将消息和对应的处理函数联系起来,当一有这样的消息产生,就会用这个处理函数来处理.消息处理函数:这个和消息响应函数是一回事.

元芳怎么了

我用的不是Linux 所以不太清楚,但应该是newwin()里面的参数有问题resource ncurses_newwin ( int $rows , int $cols , int $y , int $x )rows 是长度 , cols 是宽度,y是窗口起点的y坐标,x是窗口起点的x坐标,应该都是int类型~我看别人都是这么写的 win = newwin(15, 50, 1, 1);-------------------------------------------上次回答的分割线---------------------------------------------PS: 这个是我找到的资料 应该是你所说的问题我觉得是你在box后少了一句话 wrefresh(win);我这边没法编译所以你自己看着学了~~/////////////////////////////////////////////////////////////////////一个窗口的建立是通过一个叫做newwin()的函数开始的。别以为你使用这个函数后会立即在屏幕上出现一个窗口。这个函数的作用是分配内存给窗口相关的数据结构。因此在CURSES里,窗口是一个假想的抽象概念。可以在屏幕中对这个假想中的窗口各个部分进行独立的控制。newwin()函数返回一个指向窗口的结构指针。这个指针可以被传送至一些类似于wprintw()这样需要窗口参数的函数中。使用delwin()函数可以删除一个窗口,并且释放存储窗口数据结构的内存和信息。我要看见它!有意思的是,我们创建了一个窗口却无法看见它。所以我们要做的是如何将窗口显示出来。box()函数可以用来在已经定义的窗口外围画上边框。让我们从以下这个例子中探索一下这些函数的详细信息。例:带边框的窗口:#include <ncurses.h>WINDOW *create_newwin(int height, int width, int starty, int startx);void destroy_win(WINDOW *local_win);int main(int argc, char *argv[]){ WINDOW *my_win;int startx, starty, width, height;int ch;initscr(); /* 初始化并进入curses模式 */cbreak(); /* 行缓冲禁止,传递所有控制信息 */keypad(stdscr, TRUE); /* 程序需要使用F1功能键 */height = 3;width = 10;starty = (LINES - height) / 2; /*计算窗口中心位置的行数 */startx = (COLS - width) / 2; /*计算窗口中心位置的列数 */printw("Press F1 to exit");refresh();my_win = create_newwin(height, width, starty, startx);while((ch = getch()) != KEY_F(1)){ switch(ch){ case KEY_LEFT:destroy_win(my_win);my_win = create_newwin(height, width, starty,--startx);break;case KEY_RIGHT:destroy_win(my_win);my_win = create_newwin(height, width, starty,++startx);break;case KEY_UP:destroy_win(my_win);my_win = create_newwin(height, width, --starty,startx);break;case KEY_DOWN:destroy_win(my_win);my_win = create_newwin(height, width, ++starty,startx);break;}}endwin(); /*结束 curses模式 */return 0;}WINDOW *create_newwin(int height, int width, int starty, int startx){WINDOW *local_win;local_win = newwin(height, width, starty, startx);box(local_win, 0 , 0); /* 0, 0是字符默认的行列起始位置 */wrefresh(local_win); /*刷新窗口缓冲,显示 box */return local_win;}void destroy_win(WINDOW *local_win){/* box(local_win, ' ', ' ');不会按照预期的那样清除窗口边框。 而是在窗口的四个角落留下残余字符*/wborder(local_win, ' ', ' ', ' ',' ',' ',' ',' ',' ');/*参数注解:* 1. win:当前操作的窗口* 2. ls:用于显示窗口左边界的字符* 3. rs:用于显示窗口右边界的字符* 4. ts:用于显示窗口上边界的字符* 5. bs:用于显示窗口下边界的字符* 6. tl:用于显示窗口左上角的字符* 7. tr:用于显示窗口右上角的字符* 8. bl:用于显示窗口左下角的字符* 9. br:用于显示窗口右下角的字符*/wrefresh(local_win);delwin(local_win);}
打开App,查看更多内容
随时随地看视频慕课网APP