MFC 模态框如何处理父子窗口的数据交互
时间: 2024-09-27 14:13:29 浏览: 32
模态MFC框架窗口
MFC (Microsoft Foundation Classes) 中的模态对话框(Modal Dialog Box)通常是一个活动窗口,它会阻止用户与非模态窗口交互,直到该对话框关闭。当模态框和其父窗口需要数据交互时,可以采用以下几种方式:
1. **成员函数回调**: 父窗口可以在创建模态框时设置一个内部成员函数作为消息处理器,模态框在操作完成时通过`AfxMessageBox`或其他通知机制调用这个函数,传递数据。
```cpp
CMyDialog dialog;
dialog.SetCallbackFunction(&ParentWindow::OnDataReceived); // 设置回调函数
if (dialog.DoModal() == IDOK)
{
ParentWindow::OnDataReceived(dialog.GetData()); // 数据返回并处理
}
```
2. **信号槽机制**: 如果使用的是MFC支持的消息映射(Message Map),模态框可以发送一个特定的消息到父窗口,父窗口预先声明并处理这个消息,获取数据。
```cpp
dlg.SendMessage(WM_MY_MODAL_DIALOG_DATA, (WPARAM)data); // 发送数据
afx_msg void ParentWindow::OnMyModalDialogData(WPARAM data)
{
// 接收并处理数据
}
```
3. **公共数据成员**: 父子窗口之间共享一个公共数据结构,模态框可以直接修改这个结构,然后在适当的时候更新父窗口。
```cpp
class CSharedData {
public:
int mData; // 公共数据
void UpdateFromModal(CMyDialog& dialog)
{
mData = dialog.GetValue();
}
};
// 使用时
CSharedData sharedData;
CMyDialog dialog;
dialog.OnValueChange.connect([](int value) { sharedData.UpdateFromModal(value); });
```
阅读全文