我使用CWnd::DoModal
函数在MFC中创建对话框窗口。
该窗口在CWinApp :: OnIdle()
CPatientFile pf;
pf.DoModal();
当DoModal
函数返回时,焦点不会返回到主窗口。
我试图手动设置焦点
AfxGetMainWnd()->SetFocus();
还尝试将主窗口设置为前景或活动。
一般来说我都有触摸屏,所以当我关闭对话框时,我需要按下主窗口上的按钮才能使它工作。
那么正确的做法是什么?
答案 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
。
如果这是正确的,我可以询问是否涉及多线程。是另一个线程创建一个窗口? 你如何检查父窗口是否(没有)得到焦点?