一个程序进程间的切换

sunnyqboy 2009-02-19 11:59:46
最近做一个程序,用curses编写。程序有界面,要求在一个窗体录入的时候,可以切换到另外一个窗体,启动改程序中的查询模块,查询完毕之后又可以切回来,继续做该录入,如何实现?
如果直接用界面保存函数,如何确定回来仍在那个栏位处?
...全文
158 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunnyqboy 2009-02-26
  • 打赏
  • 举报
回复
用了panel,出现了一个比较蹊跷的问题:如下
#include <curses.h>
#include <panel.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

void initcurses();
void initwin(WINDOW **wins,int k);
void initpanel(PANEL **panels,WINDOW **wins,int k);
void set_user_ptrs(PANEL **panels,PANEL **ptrs,int n);

main()
{
int ch,i=1,j =0 ,k=2;
int start=0;
int exits=0;
int m =0;

WINDOW *wins[2];
PANEL *panels[2];
PANEL *top;
PANEL *ptrs[2];

pid_t pid;

initcurses();
initwin(wins,k);
initpanel(panels,wins,k);
set_user_ptrs(panels,ptrs,2);
box(wins[0],'.',',');
box(wins[1],'!','#');

top = panels[0];
top_panel(top);
update_panels();
doupdate();


while (ch = getch())
{
if(m < 0) m = m + 2;
m = m%2;

switch(ch)
{
case KEY_LEFT:
//top = ptrs[m];
top = panels[m];
top_panel(top);
m--;
break;
case KEY_RIGHT:
//top = ptrs[m]; //把代码换成注释部分再按左右键就不能正常切换了,为什么?
top = panels[m];
top_panel(top);
m++;
break;
case 27:
endwin();
exit(1);
}

update_panels();
doupdate();
}

endwin();
}

void initcurses()
{
initscr();
noecho();
keypad(stdscr,TRUE);
box(stdscr,'┃','━');
refresh();
}

void initwin(WINDOW **wins,int k)
{
int i;

for(i = 0;i < k;i++)
{
wins[i] = newwin(5,20,4,10);
}
}

void initpanel(PANEL **panels,WINDOW **wins,int k)
{
int i;

//for(i = (k-1);i >= 0;i--)
for(i = 0;i < k;i++)
{
panels[i] = new_panel(wins[i]);
}
}

void set_user_ptrs(PANEL **panels,PANEL **ptrs,int n)
{
int i = 0;

if((i + 1) == n)
ptrs[i] = panels[0];
else
ptrs[i] = panels[i+1];
}
waizqfor 2009-02-25
  • 打赏
  • 举报
回复
[Quote=引用楼主 sunnyqboy 的帖子:]
最近做一个程序,用curses编写。程序有界面,要求在一个窗体录入的时候,可以切换到另外一个窗体,启动改程序中的查询模块,查询完毕之后又可以切回来,继续做该录入,如何实现?
如果直接用界面保存函数,如何确定回来仍在那个栏位处?
[/Quote]
设置焦点函数 然后保存的时候记录当前位置
Dinelgua 2009-02-25
  • 打赏
  • 举报
回复
切之前 记录到文件中
沙漠里的海豚 2009-02-25
  • 打赏
  • 举报
回复
不懂了呵呵,up一下
Leejun527 2009-02-25
  • 打赏
  • 举报
回复
ncurse库里面有设置焦点的函数。具体忘了。
最好用多个面板panel来切换,这样避免界面显示混乱。
dongpy 2009-02-25
  • 打赏
  • 举报
回复
这是窗口焦点切换操作。

切换的时候,保存当前录入的位置即可。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧