繁体   English   中英

如何在MFC中的两个对话框之间传递数据

[英]How to pass data between two dialogs in mfc

我在MFC和主视图中有一个对话框。 该视图将启动一个新对话框,该对话框接受两个int值,我想将这些值返回到我的视图中。 我知道我必须对dodataexchange做一些事情,这是对话框中的代码:

void MapCreator::DoDataExchange(CDataExchange* pDX){    

    CDialogEx::DoDataExchange(pDX);

    CString stringColumn; 
    CString stringRow; 

    CWnd* dialog = GetDlgItem(columns);
    dialog->GetWindowText(stringColumn);

    dialog = GetDlgItem(rows);
    dialog->GetWindowText(stringRow);

    int numColumn = _wtoi(stringColumn);
    int numRow = _wtoi(stringRow);

    DDX_Text(pDX, columns, numColumn);
    DDV_MinMaxInt(pDX, numColumn, 1, 50); 
    DDX_Text(pDX, rows, numRow);
    DDV_MinMaxInt(pDX, numRow, 1, 50); 

}

现在如何在视图中访问这些值?

在MFC中同步数据和查看的方式是这样的:

假设您有一个带有资源ID IDC_MY_EDITBOX的编辑框,并且想要将其绑定到CString对象。 对CString的更改应反映在编辑框中,而对字符串对象的更改应更新您的UI。 对于此示例,将您的CString对象称为成员变量mEditBoxString

class MapCreator : public CDialog
{
//Everything else omitted for brevity
CString mEditBoxString; 
};

您的DoDataExchange应该看起来像

void MapCreator ::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    DDX_Text(pDX, IDC_MY_EDITBOX, mEditBoxString);
}

这样就在变量和视图之间建立了双向绑定( 编辑框

如果您在代码中更改了mEditBoxString并希望其反映在UI中。 需要以某种方式调用DoDataExchange。 您可以通过调用CWnd :: UpdateData来实现 ,在您的情况下,它将是基类方法。

如果将FALSE传递给UpdateData,则意味着将使用您对mEditBoxString所做的任何更改来更新UI。

如果将TRUE传递给UpdateData,则意味着将从用户界面更新mEditBoxString变量。 因此,如果用户确实编辑了该框,则新值将存储在mEditBoxString中

假设您的对话框中还有一个与此功能连接的按钮(例如LOAD

void CMapCreatorDlg::OnLoadClicked()
{
    //Do you heavy loading stuff here
    mEditBoxString = "Load Complete";
    UpdateData(FALSE);
}

之后,您的对话框将在编辑框中显示“ 加载完成 ”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM