前边解决了从父对话框列表控件,调用相应的选择题界面的问题,接下来,需要对选择题界面添加导航按钮。
首先给“下一题”按钮添加消息,在点击的时候,把它链接到下一个对象指针,然后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(); } }
经过测试,是有效的。