大四中软实习笔记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等类型

解决办法:
使用 子窗口---->父窗口的方法来解决。

posted on 2013-03-05 10:00  冰河程序猿  阅读(214)  评论(0编辑  收藏  举报

导航