免费注册 查看新帖 |

Chinaunix

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

[SCO UNIX] curses问题,如何保存当前界面并刷新? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-14 08:16 |只看该作者 |倒序浏览
我目前编程碰到一个问题,有两个使用curses库编程生成得应用程序A和B,现在需要在A运行过程中调用B,我是用System("B");这个方法调用的,在B执行完成退出后将返回A,但是这时A的界面就没有了,随着重新在A中的操作才慢慢的恢复回来,请问有什么办法能在调用B前保存A的当前界面,在B退出后能立即恢复呢?用了refresh()函数,没有作用。
谢谢各位~

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2006-04-14 12:57 |只看该作者
原帖由 owen22cn 于 2006-4-14 08:16 发表
我目前编程碰到一个问题,有两个使用curses库编程生成得应用程序A和B,现在需要在A运行过程中调用B,我是用System("B");这个方法调用的,在B执行完成退出后将返回A,但是这时A的界面就没有了,随着重新 ...


我的思路是在程序 a 中创建一个窗口 w_a , 调用程序 b 后,返回时对窗口 w_a 进行重绘和刷新处理,就可以了。

论坛徽章:
0
3 [报告]
发表于 2006-04-14 19:19 |只看该作者

有道理

我将W_A调用了refresh进行刷新了,但是不成功。

我想这样做,不知道可以不可以:
程序A打开一个新窗口W_A,此窗口是大空白的,然后调用System启动程序B;
退出程序B,然后关闭窗口W_A,这时是不是程序A能正常显示呢?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2006-04-14 19:28 |只看该作者
原帖由 owen22cn 于 2006-4-14 19:19 发表
我将W_A调用了refresh进行刷新了,但是不成功。

我想这样做,不知道可以不可以:
程序A打开一个新窗口W_A,此窗口是大空白的,然后调用System启动程序B;
退出程序B,然后关闭窗口W_A,这时是不是程序A能正常 ...


touchwin(w_a); wrefresh(w_a);

论坛徽章:
0
5 [报告]
发表于 2006-04-14 20:11 |只看该作者

谢谢!

非常感谢,明天到公司就实验一下!

论坛徽章:
0
6 [报告]
发表于 2006-04-14 20:48 |只看该作者
原帖由 snow888 于 2006-4-14 19:28 发表


touchwin(w_a); wrefresh(w_a);

同意

论坛徽章:
0
7 [报告]
发表于 2006-04-15 13:11 |只看该作者
给个curses库的手册可以吗

论坛徽章:
0
8 [报告]
发表于 2006-04-16 14:54 |只看该作者

测试了一下,不行啊~

我今天测试了一下:

WINDOW *FormWin,*BarWin,*MainWin;

void SystemApp1()
{
    werase(MainWin);
    werase(FormWin);
    werase(BarWin);
    system("testApp");
    wrefresh(MainWin);
    wrefresh(FormWin);
    wrefresh(BarWin);
}

void SystemApp2()
{
    system("testApp");
    touchwin(BarWin);
    wrefresh(BarWin);
    touchwin(FormWin);
    wrefresh(FormWin);
    touchwin(MainWin);
    wrefresh(MainWin);
    refresh();
}

这样写对么?都不行啊,退出testApp后屏幕上什么也没有啊,随着键盘的输入才慢慢恢复回原来的应用的界面。

请问高手,这个功能到底该用哪些函数的什么顺序来实现呢?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2006-04-16 18:36 |只看该作者
    werase(MainWin);
    werase(FormWin);
    werase(BarWin);


你的这几句话,已经把屏幕显示清除了,以后不管你怎么重绘和刷新,都只能是白版,随着你的程序击键运行,你的屏幕会再次被显示。

解决的办法是:
在 sysyemapp1() 中的
    werase(MainWin);
    werase(FormWin);
    werase(BarWin);

   wrefresh(MainWin);
    wrefresh(FormWin);
    wrefresh(BarWin);

都不要,就可以了。

另:如果你不想让屏幕上的 testapp 显示,可以采用如下方法调用:


  1. system("testapp >/dev/null 2>&1;");
复制代码


这样一来,对屏幕就不会再有任何影响。

另:给兄弟一个忠告,这个问题,你发到 C 区比较好一些。

[ 本帖最后由 snow888 于 2006-4-16 18:40 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
10 [报告]
发表于 2006-04-16 19:17 |只看该作者
还忘记说了一点,兄弟的这个程序并不完整,你仅仅是定义了窗口指针,并没有创建窗口。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP