baozhadehulu 2016-06-21 12:35 采纳率: 52.6%
浏览 1135
已采纳

请教MFC多对话框的问题

我现在有三个对话框,Information类、Login类、图书管理系统Dlg类,我设置了两个用户,现在我想在Information对话框中判断登陆的是哪一个用户,然后根据用户不同在Information对话框中显示不同的信息,我该如做?之前是声明了一个全局变量,然后通过C图书管理系统App *app=(C图书管理系统App *)AfxGetApp();//生成指向应用程序类的指针,接着app->变量名来使用,之前能用,现在一到读取这个变量的值时程序就崩溃了。
此外,我的信息是以结构体记录的形式存储的,现在只想存两条记录,我想以结构体数组的形式来存储,不用文件,这样比较省事。但是牵涉到信息修改的问题,当时信息能够修改,也能在编辑框中显示,但是如果关掉信息对话框,再打开,依然是原来的信息,可能是因为我是在Information对话框的初始化函数中给两条记录赋值的原因。代码如下:
Information.cpp

 #include "stdafx.h"
#include "图书管理系统.h"
#include "Information.h"
#include "afxdialogex.h"
#include "struct.h"
#include "LoginDlg.h"


C图书管理系统App *app=(C图书管理系统App *)AfxGetApp();  //生成指向应用程序类的指针
ADMINSTRATORLIST Adms[20]={"\0"};
// CInformation 对话框

IMPLEMENT_DYNAMIC(CInformation, CDialog)

CInformation::CInformation(CWnd* pParent /*=NULL*/)
    : CDialog(CInformation::IDD, pParent)
    , m_AdmID(_T(""))
    , m_AdmName(_T(""))
    , m_AdmGender(_T(""))
{

    m_AdmAge = _T("");
}

CInformation::~CInformation()
{
}

void CInformation::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    DDX_Text(pDX, IDC_EDIT1, m_AdmID);
    DDX_Text(pDX, IDC_EDIT2, m_AdmName);
    DDX_Text(pDX, IDC_EDIT3, m_AdmGender);
    DDX_Text(pDX, IDC_EDIT4, m_AdmAge);
}


BEGIN_MESSAGE_MAP(CInformation, CDialog)

    ON_BN_CLICKED(IDC_BUTTON_Update, &CInformation::OnBnClickedButtonUpdate)
END_MESSAGE_MAP()

BOOL CInformation::OnInitDialog()
{
    CDialog::OnInitDialog();
    // TODO:  在此添加额外的初始化

    strcpy(Adms[0].AdmID,"001");
    strcpy(Adms[0].AdmName,"梁朝伟");
    strcpy(Adms[0].AdmGender,"男");
    strcpy(Adms[0].AdmAge,"18");

    strcpy(Adms[1].AdmID,"002");
    strcpy(Adms[1].AdmName,"王祖贤");
    strcpy(Adms[1].AdmGender,"女");
    strcpy(Adms[1].AdmAge,"18");

    ShowAdmInfo();

    return TRUE;  // return TRUE unless you set the focus to a control
    // 异常: OCX 属性页应返回 FALSE
}

void CInformation::OnBnClickedButtonUpdate()
{
    // TODO: 在此添加控件通知处理程序代码
    UpdateData();


    if(app->userflag==1)
    {
        strcpy(Adms[0].AdmID,m_AdmID);
        strcpy(Adms[0].AdmName,m_AdmName);
        strcpy(Adms[0].AdmGender,m_AdmGender);
        strcpy(Adms[0].AdmAge,m_AdmAge);
        MessageBox("更新信息成功!");

    }
    else if(app->userflag==2)
    {
        strcpy(Adms[1].AdmID,m_AdmID);
        strcpy(Adms[1].AdmName,m_AdmName);
        strcpy(Adms[1].AdmGender,m_AdmGender);
        strcpy(Adms[1].AdmAge,m_AdmAge);
        MessageBox("更新信息成功!");

    }
    ShowAdmInfo();
    }


void CInformation::ShowAdmInfo(void)
{

        if(app->userflag==1)
        {
            m_AdmID=Adms[0].AdmID;
            m_AdmName=Adms[0].AdmName;
            m_AdmGender=Adms[0].AdmGender;
            m_AdmAge=Adms[0].AdmAge;
            UpdateData(false);
        }
        else if(app->userflag==2)
        {
            m_AdmID=Adms[1].AdmID;
            m_AdmName=Adms[1].AdmName;
            m_AdmGender=Adms[1].AdmGender;
            m_AdmAge=Adms[1].AdmAge;
            UpdateData(false);
        }


}

请问我该怎么解决或者怎么实现?
  • 写回答

3条回答 默认 最新

  • Eleven 2016-06-22 07:17
    关注

    CXXXApp类中有个全局唯一的类对象theApp;你可以使用它~

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog