问题解决了,但是想不通其中原理,注释了输入控件,使用俩个retun等都没有解决,望大佬指点。
原失败代码:
int YearSelect()
{
wchar_t s[5];// 定义字符串缓冲区,并接收用户输入
int a = 1;
ExMessage msg;
while (1)
{
if (peekmessage(&msg, EM_MOUSE))
{
if (msg.message == WM_LBUTTONDOWN)
{
if (msg.x >= 585 && msg.x <= 695 && msg.y >= 692 && msg.y <= 733&&a==1)
{
InputBox(s, 5, L"请输入要查询的年份");
clearrectangle(586, 694, 694, 731);
a = 0;
outtextxy(596, 690, s);
Sleep(100);
a = 0;
return 1;
}
}
}
}
}
int main()
{
int floor = 0;
InitWindows();//初始化窗口,显示2022年年历
while(true)
{
if (floor == 0)
{
YearSelect();
floor = YearSelect();
}
else if (floor == 1)
{
MonthSelect();
floor = MonthSelect();
}
}
closegraph();
}
失败代码现象:点击YearSlect()函数里按钮后,InputBox函数输入数字并显示后,点击MonthSlect()函数里按钮没反应,说明程序没有跳到else if(floor==1)语句里,再次点击YearSlect()函数里按钮,再次出现InputBox输入框,输入后显示,此时,再次点击InputBox函数里的按钮没反应,而点击YearSlect函数里按钮成功。
解决方案:主函数While(true)里的if的判断条件用全局变量,直接在函数的while循环里修改主函数循环里的判断条件。
作用:作出类似窗口切换的效果,while(1)里使用if(floor==某个设数)来进行窗口切换,注意floor使用全局变量,第一个窗口执行完后直接在改窗口的while(1)里修改floor后使用break跳出改窗口。
修改后成功的代码:
int floor = 0;
int YearSelect()
{
wchar_t s[5];// 定义字符串缓冲区,并接收用户输入
int a = 1;
ExMessage msg;
while (1)
{
if (peekmessage(&msg, EM_MOUSE))
{
if (msg.message == WM_LBUTTONDOWN)
{
if (msg.x >= 585 && msg.x <= 695 && msg.y >= 692 && msg.y <= 733 && a == 1)
{
InputBox(s, 5, L"请输入要查询的年份");
clearrectangle(586, 694, 694, 731);
a = 0;
outtextxy(596, 690, s);
Sleep(100);
floor = 1;
return 1;
}
}
}
}
}
int main()
{
InitWindows();//初始化窗口,显示2022年年历
while(true)
{
if (floor == 0)
{
YearSelect();
}
else if (floor == 1)
{
MonthSelect();
}
}
closegraph();
}