univers1314 2026-01-03 21:48 采纳率: 36.4%
浏览 14

mfc 不同类之间控件变量怎样调用?

mfc 不同类之间控件变量怎样调用?
我写了一个小程序,主程序窗口为一个类,比如名字是 BxDlg.cpp
第二个窗口是Ps.cpp 程序启动时,密码认证的。加了两个EDIT控件 IDC_USERNAME 和 IDC_PASSWORD
变量为 m_username 和 m_password
那问题来了,我在主程序 BOOL CBxDlg::OnInitDialog() 里要调用这两个用户和密码的变量,调不了,我头大死了!

img


```c++
// CBxDlg 消息处理程序

BOOL CBxDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    // 将“关于...”菜单项添加到系统菜单中。

    // IDM_ABOUTBOX 必须在系统命令范围内。
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);

    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
        BOOL bNameValid;
        CString strAboutMenu;
        bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
        ASSERT(bNameValid);
        if (!strAboutMenu.IsEmpty())
        {
            pSysMenu->AppendMenu(MF_SEPARATOR);
            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }
    }

    // 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
    //  执行此操作
    SetIcon(m_hIcon, TRUE);            // 设置大图标
    SetIcon(m_hIcon, FALSE);        // 设置小图标

    // TODO: 在此添加额外的初始化代码
    INT_PTR nRes;             // 用于保存DoModal函数的返回值   
    Ps tipDlg;           // 构造对话框类CTipDlg的实例   
    nRes = tipDlg.DoModal();  // 弹出对话框

    if (nRes == 2)     // 判断对话框退出后返回值是否为IDCANCEL,如果是则return,否则继续向下执行
    {
        MessageBox("窗口内容2退出", "窗口标题", MB_OK);

        PostQuitMessage(0);                //用于优雅地结束消息循环。
        AfxGetApp()->ExitInstance();    //是 MFC 中最推荐的退出方法。避免直接调用 exit() 或 TerminateProcess()避免资源泄漏。
    }
    else
    {
        MessageBox("窗口内容1好的", "窗口标题", MB_OK);

        // 更新控件对应变量的值
        UpdateData(TRUE);
        // 判断用户名和密码并进入主界面
        CString username, password;
        GetDlgItemText(IDC_USERNAME, username);    //这个不行 调不到是空的
        GetDlgItemText(IDC_PASSWORD, password);    //这个不行 调不到是空的

        this->GetDlgItemText(IDC_USERNAME, username);        //这个不行 调不到是空的
        this->GetDlgItemText(IDC_PASSWORD, password);        //这个不行 调不到是空的

        m_username.GetWindowText(username);        //这个认不到另一个窗口类的变量
        m_password.GetWindowText(password);        //这个认不到另一个窗口类的变量
        if (username == "admin" && password == "123456")
        {
            // 关闭登录界面
            CDialogEx::OnOK();
        }

    }

    return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

```

  • 写回答

4条回答 默认 最新

  • 赵4老师 2026-01-04 09:20
    关注

    应在子对话框按“好的”按钮时,调用GetWindowText将用户名和密码控件的内容保存到对话框类中声明的public CString username,password变量中。
    在主对话框代码中获取这两个CString变量dlg.username和dlg.password

    评论

报告相同问题?

问题事件

  • 创建了问题 1月3日