前边解决了从父对话框列表控件,调用相应的选择题界面的问题,接下来,需要对选择题界面添加导航按钮。
首先给“下一题”按钮添加消息,在点击的时候,把它链接到下一个对象指针,然后DoModal。这样如果一直点击,就可以一直打开到最后一题的对话框。如果点击“上一题”按钮的时候,就要考虑把已经打开的对话框关掉,也就是触发“返回”按钮的消息。所以,对每个对话框首先应该判断是否在前一次操作中打开过,如果打开过,则触发“返回”按钮消息,如果没打开过则调用next指针。这时候,标志位flag 变量就起作用了。首先要在程序中,对标志位设初值0,打开则设1,关闭的时候再设0。对“上一题”作类似的设计。具体代码如下,
void CDlgSEL::OnBnClickedButSelNext()
{
// TODO: 在此添加控件通知处理程序代码
CDlgSEL_main *p = (CDlgSEL_main *)this->GetParent();
CString str;
int i;
p1 = this;
if ((this->next->flag) != 1 && this->ise!=4)
{
this->next->flag = 1;
this->next->DoModal();
}
else if (this->ise==4)
{
for(i = 4; i > -1; i--)
{
if (p1->flag == 1)
{
this->flag = 0;
p1->OnBnClickedButSelReturn();
p1 = p1->last;
}
}
}
else if (this->next->flag == 1)
{
this->flag = 0;
p1->OnBnClickedButSelReturn();
}
}
void CDlgSEL::OnBnClickedButSelPrev()
{
// TODO: 在此添加控件通知处理程序代码
CDlgSEL_main *p = (CDlgSEL_main *)this->GetParent();
CString str;
int i;
p1 = this;
if ((this->last->flag) != 1 && this->ise != 0)
{
this->last->flag = 1;
this->last->DoModal();
}
else if (this->ise == 0)
{
for (i = 0; i < 5; i++)
{
if (p1->flag == 1)
{
this->flag = 0;
p1->OnBnClickedButSelReturn();
p1 = p1->next;
}
}
}
else if (this->last->flag == 1)
{
this->flag = 0;
p1->OnBnClickedButSelReturn();
}
}
经过测试,是有效的。