在字段中编辑文本后我按Enter键,我希望得到编辑的值,但收到的字符串不变。 我尝试通过非c_string缓冲区初始化字段,空格为空闲字符,结果相同。我不知道为什么会这样。没有找到类似的问题。
Latest Cygwin,Debian,结果相同。
#include <unistd.h>
#include <cstring>
#include <curses.h>
#include <form.h>
#include <iostream>
using namespace std;
int main()
{
string str = "hello";
initscr();
noecho();
keypad(stdscr, TRUE);
cbreak();
int field_width = 30;
FIELD* fields[] =
{
new_field( /*H*/1, /*W*/field_width, /*Y*/0,/*X*/0, 0, 0),
NULL
};
set_field_back(fields[0], A_UNDERLINE);
field_opts_off(fields[0], O_AUTOSKIP);
FORM* form = new_form( fields );
post_form( form );
refresh();
set_field_buffer( fields[0], 0, str.c_str() );
form_driver(form,REQ_END_LINE);
// Loop through to get user requests
int ch;
while((ch = getch()) != KEY_F(1))
{
switch(ch)
{
default: // paste char
form_driver(form, ch);
break;
case '\n':
case KEY_ENTER:
{
char * field_buff = field_buffer( fields[0], 0 );
// Iknow about spaces at the end of line
str = field_buff;
unpost_form(form);
free_form(form);
free_field(fields[0]);
endwin();
//
cout << "edited string: " << str << endl;
sleep(2);
//
return 0;
}
// end case Enter
}
// end switch
}
// end while
}
// end main
答案 0 :(得分:-1)
field_buffer手册页说
缓冲区内容使用
@Override public void resize(int width, int height) { m_viewport.update(width, height, true); }
设置, 或作为任何编辑操作的副作用 相应的字段。
编辑操作是form_driver的请求,如该手册页中所列。