大四中软实习笔记20130304
1 模式对话框
使用步骤:
1 画界面----对话框
2 将界面关联为类
3 实现该对话框的功能------关联成员变量、成员函数
4 在主界面的OnInitDialog函数里使用新建的类
建立了局部变量(对象)----不显示
调用DoModal成员函数,来显示新的界面
注意点:
1 DoModal相当于阻塞函数-----与scanf类似,即如果不按确定或取消按钮,该函数不返回。
2 利用DoModal的返回值(IDOK IDCANCEL)来决定,是否退出主界面
3 关闭窗口的方法:OnOk OnCancel,区别只是返回值不一样
3 不要用exit(1)来退出整个程序,因为内存泄露
代码:按确定按钮,进行密码验证
void CLogin::OnButtonOk()
{
// TODO: Add your control notification handler code here
UpdateData();
if(m_edit_name=="zhangsan" && m_edit_passwd=="123456")
{
OnOK();
}
else
{
AfxMessageBox("密码错误,请重新输入!");
}
}
void CLogin::OnButtonCancel()
{
// TODO: Add your control notification handler code here
OnCancel();
}
在OnInitDialog函数里,增加代码,弹出登陆界面。
CLogin login;
//=login.DoModal();
int nResponse = login.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
OnOK();
}
2 窗口间的消息发送
2.1 子窗口---->父窗口
如何得到父窗口的地址?
利用GetParent函数。注意强制类型转换----恢复真实面目。
不要忘了操作父窗口的UpdateData
void CLogin::OnButtonOk()
{
// TODO: Add your control notification handler code here
UpdateData();
if(m_edit_name=="zhangsan" && m_edit_passwd=="123456")
{
CMfc3Dlg *p=(CMfc3Dlg *)GetParent();
p->m_edit_name=m_edit_passwd;
p->UpdateData(FALSE);
OnOK();
}
else
{
AfxMessageBox("密码错误,请重新输入!");
}
}
2.2 父窗口---->子窗口
方法:
父窗口有子窗口的对象(变量),所以可以直接操作。
举例:
父窗口修改子窗口的 编辑框内的值
void CMfc3Dlg::OnButtonChaxun()
{
// TODO: Add your control notification handler code here
CChaxunDlg chaxun;
//chaxun.m_list_stu.InsertColumn(0,"学号",LVCFMT_CENTER,80); //注意:因为m_list_stu在CChaxunDlg类的构造函数中没有初始化,所以不能操作。
//chaxun.m_list_stu.InsertColumn(1,"姓名",LVCFMT_CENTER,80);
//chaxun.m_list_stu.InsertItem(0,"");
//chaxun.m_list_stu.SetItemText(0,0,"4001");
//chaxun.m_list_stu.SetItemText(0,1,"wangwu");
chaxun.m_edit_name_chaxun="测试"; //注意:m_edit_name_chaxun在CChaxunDlg类的构造函数中已经初始化了,所以可以操作。
chaxun.DoModal();
}
注意:
控件类的成员变量,在构造函数中没有初始化,所以不能操作。如CListCtrl、CComboBox等类型
值类的成员变量,在构造函数中初始化过了,所以可以操作。如CString、int等类型
解决办法:
使用 子窗口---->父窗口的方法来解决。