麻烦有人能详细看一下,有点急,我会尽量写注释讲清楚,麻烦大家了!有必要可以有偿!!本人qq1561844542,求帮助!
//显示主界面的函数
void Manage::runMain()
{
int op = CHOCICE_AGAIN; //默认刚开始显示主界面
Window::beginDraw();
while (true)
{
Window::clr();
print_Background(Main_bk);
if (Window::ifHaveMsg())
m_msg = Window::getMsg(); //一直读取消息
switch (op)
{
case CHOCICE_AGAIN:
op = MainWaitChoice(); //主界面
break;
case MANAGER:
op = ManagerPage(); //管理员界面
break;
default:
exit(1);
break;
}
Window::flushDraw();
}
Window::endDraw();
}
//主界面函数
//有两个按钮,一是管理员入口,二是学生入口,目前只做了管理员入口
int Manage::MainWaitChoice()
{
for (int index = 0; index < Main_Page_Btn.size(); index++)
{
Main_Page_Btn[index]->show(); //按钮类的显示函数
Main_Page_Btn[index]->eventLoop(m_msg);
if (Main_Page_Btn[index]->ifClicked())
return index;
}
return CHOCICE_AGAIN;
}
//管理员登录界面
int Manage::ManagerPage()
{
//背景
print_Background(Manager_bk);
//标题
setbkmode(TRANSPARENT);
setcolor(WHITE);
settextstyle(40, 0, "黑体");
outtextxy(380, 100, "管理员登录");
//第一个文本框,用于记录用户名
Manager_Page_Text_Btn[0]->show(); //文本框类的显示函数
Manager_Page_Text_Btn[0]->eventLoop(m_msg);
return MANAGER;
}
在管理员界面函数中,文本框类的eventLoop函数如下
void TextBox::eventLoop(const ExMessage& msg)
{
m_msg = msg;
if (ifHover()) //如果鼠标悬停在当前的文本框上表示可以输入
{
showCursor(); //显示光标
if (m_msg.message == WM_KEYDOWN) //如果消息是按键按下
{
if (m_msg.vkcode == VK_NUMPAD0) //如果按下的是0,将0放入数组中用于显示
this->append('0');
}
}
}
这里加上ifHover()这个判断条件,运行的时候鼠标悬停在文本框上时,能做到显示光标,但是输入0的时候不仅不显示0,光标还会消失,点一下鼠标左键光标会出现,但是数字0还是没有。
而且如果把if(ifHover())这个判断去掉的话,按一下0会出现很多的0