显示对话框后无法将焦点返回到主窗口

时间:2014-05-14 15:02:54

标签: c++ mfc

我使用CWnd::DoModal函数在MFC中创建对话框窗口。 该窗口在CWinApp :: OnIdle()

中实例化
CPatientFile pf;
pf.DoModal();

DoModal函数返回时,焦点不会返回到主窗口。 我试图手动设置焦点

AfxGetMainWnd()->SetFocus();

还尝试将主窗口设置为前景或活动。

一般来说我都有触摸屏,所以当我关闭对话框时,我需要按下主窗口上的按钮才能使它工作。

那么正确的做法是什么?

2 个答案:

答案 0 :(得分:2)

只需检查CPatientFile的构造函数即可。它可能正在接受父窗口CWnd *。将主窗口作为父窗口传递。

CPatientFile pf(this); //if this code is in main window class itelf

CPatientFile pf(AfxGetMainWnd());

<强>更新

如果您已从主窗口实例化对话框,则对话框关闭时焦点将自动返回到窗口。我怀疑你在创建主窗口后已经从app类本身(CWinApp)实例化了对话框。如果是这种情况,则主窗口可能无法获得焦点。您必须在主窗口中创建对话框。或者,如果您在单独的线程中创建对话框。

作为一种解决方法,您可以使用AfxGetMainWnd() - &gt; SetForegroundWindow()或AfxGetMainWnd() - &gt; SetActiveWindow()。但首先我会试着找出问题的原因并且尝试编写更好的代码(如上段所示)。

答案 1 :(得分:0)

如果您已复制粘贴,则该声明本身不正确:

CPatientFile pf();

下一行根本不应该编译。为什么?因为它声明了一个名为pf的函数,它返回CPatientFile

如果这是正确的,我可以询问是否涉及多线程。是另一个线程创建一个窗口? 你如何检查父窗口是否(没有)得到焦点?