Как сохранить фокус на верхнем окне 1-го экрана после нажатия 2-го экрана - PullRequest
0 голосов
/ 26 апреля 2019

у нас есть один рабочий стол (1-й экран) для отображения изображения и другой сенсорный экран (2-й экран) для элемента управления, мы написали виртуальную клавиатуру (html & javascript) на сенсорном экране, в идеале, когда мы касаемся клавиш на сенсорном экране, мы могли бы ввести текст в поле ввода (в диалоговом окне ввода) на первом рабочем столе. Теперь проблема в том, что мышь теряется (изначально она находится в диалоговом окне ввода на первом рабочем столе), когда мы прикасаемся к сенсорному экрану, поэтому нам нужно создать глобальное окно в программе на C ++ и вручную скопировать каждое возможное диалоговое окно ввода в это глобальное окно. когда он используется, нам также нужно установить фокус для каждого возможного поля редактирования в этом диалоговом окне ввода. пожалуйста, посмотрите это:

для каждого возможного диалогового окна ввода мы добавляем

    extern HWND activeInputWindow;
    activeInputWindow=m_Edit_Name.m_hWnd;

также для каждого возможного поля ввода в этом окне мы должны добавить

    activeInputWindow=GetDlgItem(IDC_EDIT_TEST)->m_hWnd;

тогда программа всегда делает это, чтобы вернуть исходное окно после нажатия на сенсорный экран (2-е окно)

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

предположим, у нас есть 10 окон ввода и 10 полей ввода в каждом окне, тогда мне нужно кодировать 100 мест! Там должно быть несколько простых способов, Windows osk.exe (виртуальная клавиатура) не имеет проблем для этого, но мы должны использовать нашу собственную виртуальную клавиатуру .... Я пробовал GetTopWindow () и GetForegroundWindow (), но не работает .. Большое спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 27 апреля 2019

Это попытка решить проблему, используя неправильные инструменты. То, что вы действительно хотите, это окно, которое получает входные данные, но отклоняет активацию. Для этого обработайте сообщение WM_MOUSEACTIVATE , вернув MA_NOACTIVATE. Это также работает для сенсорного ввода.

См. Как я могу иметь окно, которое отклоняет активацию, но все еще получает указатель ввода? для всех входов и выходов.

0 голосов
/ 27 апреля 2019

Проблема в том, что ваша виртуальная клавиатура крадет фокус элемента управления редактированием. Вы должны будете предотвратить это.

Попробуйте установить флаг WS_EX_NOACTIVATE для стиля окна или других подходов из этого или этого ответов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...