Avoid application activation and focus in when clicking buttons on it - Windows API or Qt

試著忘記壹切 提交于 2020-01-11 08:48:07

问题


Situation: A border-less QDialog stays successfully on top of other applications.

The problem is when clicking on this always-on-top application window, the following occurs:

  • The clicked always-on-top application gets activated
  • The clicked always-on-top application window steals the focus of previous active/focused app

Is there a possibility that when clicking on this always-on-top inactive and unfocused application window,

  • the current application does not loose activation and focus
  • while user being still able to interact with the always-on-top application (hitting buttons or drop-down menus, dragging the window)?

I'm working with Qt but there's no problem about using native Windows API.

I tried the following Qt windowFlag:

  • Qt::WindowDoesNotAcceptFocus but it does not work: the always-on-top application is activated, focused.
  • Qt::WindowTransparentForInput, the always-on-top application is really transparent to clicks: not activated and not focused in but buttons are unfortunately not triggered when hit.

回答1:


It is possible to make a window unactivable and unfocusable when clicking on it by using Windows flags (#include <qt_windows.h>). The following has to be used after the window is created and shown:

HWND winHandle = (HWND)winId();
ShowWindow(winHandle, SW_HIDE);
SetWindowLong(winHandle, GWL_EXSTYLE, GetWindowLong(winHandle, GWL_EXSTYLE)
    | WS_EX_NOACTIVATE | WS_EX_APPWINDOW);
ShowWindow(winHandle, SW_SHOW);



回答2:


I don't know about QDialog, I'm using just a QWidget for similar purpose (displaying a Windows 8 style notification).

Try setting:

dialog->setFocusPolicy(Qt::NoFocus);
dialog->setAttribute(Qt::WA_ShowWithoutActivating); 

maybe you'll have to set focus policy on all children.



来源:https://stackoverflow.com/questions/18662031/avoid-application-activation-and-focus-in-when-clicking-buttons-on-it-windows

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!