如何在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,这意味着UI将更新你对mEditBoxString所做的任何更改。
如果你传递TRUE到UpdateData,这意味着mEditBoxString变量将从UI更新。因此,如果用户确实编辑了该框新值将存储在mEditBoxString
假设你在对话框中也有一个按钮(比如LOAD)它连接到这个函数
void CMapCreatorDlg::OnLoadClicked()
{
//Do you heavy loading stuff here
mEditBoxString = "Load Complete";
UpdateData(FALSE);
}
之后,您的对话框将在编辑框中显示Load Complete。 相关文章:
- 如何在C++中从两个单独的for循环中添加两个数组
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 基于 MFC 对话框的应用程序无法调用对话框两次
- 使两个QT对话框相互关闭
- 如何在ROS中很好地订阅两个主题(图像和边界框分开发布)
- 如何将多个变量从QT对话框传递到主窗口
- 打开文件对话框如何选择多个文件而不是文件夹
- 通过将两个不同的文本框值相乘来设置标签的文本值
- 选项卡控件中的嵌入式对话框无法在第二个对话框 MFC 中工作
- 如何创建具有不同项目字符串的两个不同的组合框
- C++ 使用 WINAPI 启动多个无模式对话框(无 MFC)
- 如何连接两个对话框
- 两个内部班级之间的对话
- 进度条在多个对话框与线程
- 如何在mfc的两个对话框之间传递数据
- Win32 API从带有两个组合框的对话框中读取组合框值
- 在MFC,我怎么能有一个按钮来创建几个对话框实例连续不关闭它们
- 是否有可能在Qt上的一个窗口中显示两个不同的对话框窗口
- 多个对话框在一个dfm
- 添加两个文本框浮动值,需要在第三个文本框中显示