父窗口通过以下方法调用子窗口类CFingerScanner CFingerScanner dlgFingerScanner; dlgFingerScanner.DoModal(); 子窗口类CFingerScanner的代码中如何正确返回父窗口
时间: 2025-06-14 17:15:57 浏览: 1
在子窗口类`CFingerScanner`中,当DoModal()方法返回时,它通常会结束对话框并返回一个整数值,这个值表示用户的选择或操作结果。例如,如果使用模态对话框的标准模式,`IDOK`(确定)按钮会被映射为TRUE,` IDCANCEL`(取消)按钮映射为FALSE。你可以直接返回`dlg.DoModal()`的结果给父窗口,这通常是通过`ParentWindow`指针或者全局变量来完成的。
假设你的父窗口有一个成员变量(如`CDlgParent`)保存着`CFingerScanner`的指针,可以在子窗口的`OnInitDialog()`或者响应某个特殊按钮点击事件的地方返回结果:
```cpp
// 子窗口类CFingerScanner中
LRESULT CFingerScanner::OnInitDialog()
{
// ... 初始化对话框 ...
// 当确定按钮被按下时,返回对话框结果
if (IDOK == IDOK)
{
CDialogResult dialogResult(TRUE); // 或者直接return TRUE
// 通过ParentWindow传递结果
if (CDlgParent* pParent = dynamic_cast<CDlgParent*>(AfxGetMainWnd()))
{
pParent->OnFingerScannerFinished(dialogResult);
}
else
{
// 如果找不到父窗口,可能需要错误处理
AtlMessageBox(NULL, L"无法找到父窗口", L"错误", MB_OK | MB_ICONERROR);
EndModal(FALSE); // 如果找不到,假定用户选择取消
}
}
else if (IDCANCEL == IDCANCEL)
{
CDialogResult dialogResult(FALSE);
OnFingerScannerFinished(dialogResult);
}
return TRUE;
}
// 父窗口CDlgParent中处理子窗口结果的方法
void CDlgParent::OnFingerScannerFinished(const CDialogResult& result)
{
// 使用结果做后续处理
switch (result.m_result)
{
case TRUE:
// 用户选择了OK,处理逻辑...
break;
case FALSE:
// 用户选择了Cancel,处理逻辑...
break;
default:
// 其他情况...
break;
}
}
```
在这个例子中,`OnFingerScannerFinished`方法是你自定义的,在父窗口中接收子窗口返回的结果并采取相应的行动。
阅读全文
相关推荐













