单击第二屏幕后如何将焦点保持在第一屏幕的顶部窗口

时间:2019-04-26 18:19:44

标签: c++ winapi

我们有一个用于显示图像的桌面(第一个屏幕)和另一个用于控制的触摸屏(第二个屏幕),我们在触摸屏上编写了一个虚拟键盘(html&javascript),理想情况下,当我们触摸触摸屏上的按键时,我们可以输入第一个桌面上的editbox(在输入对话框窗口中)中的文本。现在的问题是,当我们触摸触摸屏时,鼠标丢失了(最初是在第一个桌面的输入对话框中),因此我们必须在C ++程序中创建一个全局窗口,并手动将每个可能的输入对话框窗口复制到该全局窗口中使用时,我们还需要在此输入对话框窗口中为每个可能的编辑框设置焦点。请看这个:

对于每个可能的输入对话框,我们添加

    extern HWND activeInputWindow;
    activeInputWindow=m_Edit_Name.m_hWnd;

还必须为该窗口中的每个可能的输入框添加

    activeInputWindow=GetDlgItem(IDC_EDIT_TEST)->m_hWnd;

然后,在单击触摸屏(第二个窗口)后,程序总是执行此操作以返回原始窗口

extern HWND activeInputWindow;
if(IsWindow(activeInputWindow)) 
  ::SetFocus(activeInputWindow);

假设我们有10个输入窗口,每个窗口有10个输入框,那么我需要编码100个位置!必须有一些简单的方法,Windows osk.exe(虚拟键盘)对此没有问题,但是我们必须使用自己的虚拟键盘。...我尝试了GetTopWindow()和GetForegroundWindow(),但无法正常工作。帮助

2 个答案:

答案 0 :(得分:0)

问题在于您的虚拟键盘正在抢占编辑控件的焦点。您需要防止这种情况。

尝试从thisthis的答案中为窗口的样式或其他方法设置标志WS_EX_NOACTIVATE

答案 1 :(得分:0)

这正试图使用​​错误的工具解决问题。您真正想要的是一个可以接收输入但拒绝激活的窗口。为此,请返回MA_NOACTIVATE处理WM_MOUSEACTIVATE消息。这也适用于触摸输入。

有关所有内容,请参见How can I have a window that rejects activation but still receives pointer input?