Visual c++ 在嵌入式模式下运行的MFC应用程序

Visual c++ 在嵌入式模式下运行的MFC应用程序,visual-c++,com,mfc,Visual C++,Com,Mfc,我们有一个在嵌入式模式下运行的MFC应用程序,可以通过其COM接口通过其他应用程序调用。在嵌入式模式下,它不应该关注焦点,但正如我们看到的,它正在关注焦点,用户键盘输入从当前应用程序更改为我们的MFC应用程序 我正在寻找一种解决方法,在embedded中运行的MFC应用程序获得焦点后立即删除焦点 为了解决这个问题,我通过映射消息WM_SETFOCUS注册了OnSetFocus方法,并尝试使用下面的windowapi SetWindowPos从我的MFC应用程序中删除焦点,但这也没有帮助 void

我们有一个在嵌入式模式下运行的MFC应用程序,可以通过其COM接口通过其他应用程序调用。在嵌入式模式下,它不应该关注焦点,但正如我们看到的,它正在关注焦点,用户键盘输入从当前应用程序更改为我们的MFC应用程序

我正在寻找一种解决方法,在embedded中运行的MFC应用程序获得焦点后立即删除焦点

为了解决这个问题,我通过映射消息WM_SETFOCUS注册了OnSetFocus方法,并尝试使用下面的windowapi SetWindowPos从我的MFC应用程序中删除焦点,但这也没有帮助

void CTestMFCApplicationView::OnSetFocus(CWnd* pOldWnd)
{
   CView::OnSetFocus(pOldWnd);
   OutputDebugString(L"OnSetFocus\r\n");
   // TODO: Add your message handler code here
   CView::SetWindowPos(&CWnd::wndBottom, 0, 0, 0, 0,
      SWP_NOACTIVATE);
}

我要做的是在OnSetFocus中设置一个断点,以查看是什么触发了要设置的焦点。你可以在那里做些什么来防止焦点被设置


如果你无法阻止,那么下一个选择就是做出反应。我认为SetWindowPos是错误的方法。以前具有焦点的窗口是在OnSetFocus中传递的pOldWnd参数。您可以尝试pOldWnd->SetFocus而不是SetWindowPos。这可能有效,也可能无效。更好的选择可能是给自己发一条消息,比如WM_USER+1或WM_APP+1,或者以pOldWnd的HWND作为参数的注册消息。当您收到该消息时,使用WinAPI调用::SetFocushWnd。

作为一种解决方法,我尝试使用pOldWnd->SetFocus将焦点恢复到上一个窗口。但是,我将pOldWnd设置为NULL,因此此实现在我这方面不起作用。我不明白为什么我会变空。