
之前写过如何用 Qt 现成的方法写出无边框半透明的不规则窗体:《Qt 不规则窗体 – 无边框半透明》
其实有一个很特殊的窗体属性一直以来都伴随着不规则窗体出现,这就是本文要介绍的鼠标点击穿透。鼠标点击穿透被广泛应用在桌面挂件程序上,目的是为了避免鼠标对窗体进行误操作。
Qt 并没有自带的方法可以实现该功能,所以需要调用系统本身的 API 来实现。这里介绍下 Windows 下和 Linux 下如何实现鼠标点击穿透。
Windows API : SetWindowLong
SetWindowLong是一个Windows API函数。该函数用来改变指定窗口的属性.函数也将指定的一个32位值设置在窗口的额外存储空间的指定偏移位置。
函数定义:
1 2 3 4 5 |
LONG WINAPI SetWindowLong( _In_ HWND hWnd, _In_ int nIndex, _In_ LONG dwNewLong ); |
头文件:
1 |
#include<Winuser.h> |
代码示例:
1 2 |
SetWindowLong((HWND)winId(), GWL_EXSTYLE, GetWindowLong((HWND)winId(), GWL_EXSTYLE) | WS_EX_TRANSPARENT | WS_EX_LAYERED); |