我想用ege的sys_edit输入框来接受参数,进行自定义图形的绘制。
但是现在我的代码出现了一个问题:我的设想是用户每输入一个数,提交(enter)一次后inputcount就会+1,直到7个参数都输入完毕再进行画图。不知道为什么我只输入了一个参数就开始画图了,而且好像还画不出颜色来(只能画出黑白灰)
请问是哪里出了问题?谢谢!
for循环isrun外的初始化语句:
//输入框要定义在帧循环之外
sys_edit editBox;
editBox.create(false); //创建,false表示单行,true表示多行
editBox.move(40, 200); //设置位置
editBox.size(200, 50); //设置尺寸
editBox.setmaxlen(30); //设置允许输入的字符数
editBox.setbgcolor(EGERGB(254, 238, 237));
editBox.setcolor(EGERGB(12, 33, 43));
editBox.setfont(20, 0, "黑体");
editBox.setfocus(); //设置获取焦点
//创建输入缓存区
const int buffSize = 100;
char strBuffer[100] = "";
bool hasInput = false; //标记是否有数字输入
bool error = false; //标记是否输入错误
int x;
bool isVisible = false;
for循环内初始化部分语句:
bool isSubmit = false;
std::arrayget{"255","215","0","600","400","100","1"};
int inputcount = 0;
如果输入f4就弹出输入框.这个语句在while(kbmsg())里
case key_f4:
editBox.setreadonly(false);
editBox.visible(true);
isVisible = true;
ege::setcolor(BLACK);
ege::setfont(30, 0, "Baskerville Old Face");
outtextxy(40, 140, "Please input in order:");
outtextxy(40, 170, "1)set color R 2) set color G 3) set color B 4) set center x 5) set center y 6) set radius 7)set fill(1 or 0) ");
break;
if ((msg.key == key_enter)&&(isVisible)) {
isSubmit = true;
}
剩下是主体部分画图:
//如果按下了enter且仍需要输入
while((isSubmit)&&(inputcount<7)) {
//获取输入框内容字符串
editBox.gettext(buffSize, strBuffer);
//判断输入是否为空
if (strBuffer[0] == '\0') {
hasInput = error = false;
//continue
}
//判断是否成功读取到数字
else if (sscanf_s(strBuffer, "%d", &x) == 1) {
//传值,保存
outtextxy(10, 200, "ok");
get[inputcount] = std::string(strBuffer);
setcolor(BLACK);
setfont(30, 0, "黑体");
xyprintf(200, 100, "%s", to_cstr(get[inputcount]));
inputcount++;
//错误判断
error = false;
hasInput = true;
}
//输入错误
else {
hasInput = error = true;
if (hasInput) { //有输入
if (error) { //有输入但是输入错误
//输出错误提示
ege::setcolor(RED);
ege::setfont(20, 10, "Baskerville Old Face");
outtextxy(40, 120, "Wrong input, please try again");
}
}
}
}
//画图
if (inputcount==7) {
Color fillc, borderc;
fillc = borderc = { atoi(to_cstr(get[0])),atoi(to_cstr(get[1])),atoi(to_cstr(get[2])) };
Shape* circle0 = new Circle(Point(atoi(to_cstr(get[3])), atoi(to_cstr(get[4]))), atoi(to_cstr(get[5])), borderc, atoi(to_cstr(get[6])), fillc);
circle0->draw();
}
// 重置状态,准备下一轮输入
isSubmit = false;
inputcount = 0;
不知道你这个问题是否已经解决, 如果还没有解决的话: