GWL_EXSTYLE
时间: 2023-07-14 14:01:07 浏览: 228
GWL_EXSTYLE是SetWindowLong函数中用于指定窗口的扩展样的窗口属性索引。通过修改GWL_EXSTYLE属性,可以改变窗口的扩展样式,例如窗口的透明度、窗口的层级、窗口的阴影效果等。
常见的GWL_EXSTYLE属性值包括:
- WS_EX_TRANSPARENT:使窗口透明,可以透过窗口看到后面的内容。
- WS_EX_LAYERED:使窗口支持透明度,可以通过设置透明度来调整窗口的不透明度。
- WS_EX_TOPMOST:使窗口总是置顶显示,无论其他窗口是否激活。
- WS_EX_TOOLWINDOW:将窗口显示为工具窗口,通常没有任务栏按钮。
- WS_EX_WINDOWEDGE:在窗口边缘显示一个边框。
- WS_EX_CLIENTEDGE:在窗口客户区域显示一个凸起的边框。
可以通过使用SetWindowLong函数,将修改后的扩展样式值传递给GWL_EXSTYLE属性索引,以改变窗口的扩展样式。
相关问题
SetWindowLong(_hwnd, GWL_EXSTYLE, WS_EX_TOPMOST | WS_EX_LAYERED | WS_EX_TRANSPARENT | WS_EX_TOOLWINDOW); 用这条代码使鼠标可以穿过窗体,直接点击桌面,但是没有办法取消鼠标穿透。
### 回答1:
这条代码设置了一个窗口的扩展样式,其中包含了 WS_EX_TOPMOST、WS_EX_LAYERED、WS_EX_TRANSPARENT 和 WS_EX_TOOLWINDOW 四种样式。其中,WS_EX_TOPMOST 表示这个窗口总在最上面,WS_EX_LAYERED 表示这个窗口使用颜色加权混合方式绘制,WS_EX_TRANSPARENT 表示这个窗口是透明的,WS_EX_TOOLWINDOW 表示这个窗口是一个工具窗口。这条代码将扩展样式设置为这些样式的组合,从而使得鼠标可以穿过窗体,直接点击桌面。但是,这条代码并没有提供取消鼠标穿透的方法。如果想要取消鼠标穿透,你可以将窗口的扩展样式设置为不包含 WS_EX_TRANSPARENT 的样式,这样就可以解除鼠标穿透效果了。
### 回答2:
使用SetWindowLong函数来设置窗口的扩展样式,包括WS_EX_TOPMOST、WS_EX_LAYERED、WS_EX_TRANSPARENT和WS_EX_TOOLWINDOW。其中WS_EX_TOPMOST将窗口设置为最顶层,WS_EX_LAYERED使窗口支持透明效果,WS_EX_TRANSPARENT使窗口透明,并且允许鼠标穿透,WS_EX_TOOLWINDOW将窗口标识为工具窗口。
通过使用以上代码,可以使鼠标可以穿过窗体,直接点击桌面。但是在没有其他的代码进行修改的情况下,无法取消鼠标穿透。如果要取消鼠标穿透,需要进行进一步的操作。
可以使用以下代码取消鼠标穿透功能:
SetWindowLong(_hwnd, GWL_EXSTYLE, GetWindowLong(_hwnd, GWL_EXSTYLE) & ~WS_EX_TRANSPARENT);
通过使用GetWindowLong函数获取当前窗口的扩展样式,并且取消WS_EX_TRANSPARENT标志位,最后通过SetWindowLong函数重新设置窗口的扩展样式。
注意:以上操作仅针对当前窗口进行修改,如果要取消其他窗口的鼠标穿透功能,需要在相应的窗口句柄上进行相同的操作。
### 回答3:
使用SetWindowLong函数设置窗体的扩展样式,包括WS_EX_TOPMOST(窗体置顶)、WS_EX_LAYERED(窗体透明)、WS_EX_TRANSPARENT(鼠标穿透)和WS_EX_TOOLWINDOW(工具窗口)。通过将这些扩展样式使用按位或运算符合并在一起,通过_hwnd参数指定窗体的句柄,可以使鼠标可以穿过窗体直接点击桌面。
然而,根据提供的代码,没有提供取消鼠标穿透的方法。调用SetWindowLong函数并设置新的窗体扩展样式后,将无法通过类似的方式来取消鼠标穿透。如果要取消鼠标穿透,需要重新调用SetWindowLong函数,并在GWL_EXSTYLE参数中使用原始窗体的扩展样式,而不包括WS_EX_TRANSPARENT。这将覆盖之前设置的样式,从而实现取消鼠标穿透的效果。
具体的代码示例如下:
```c++
// 设置窗体的扩展样式,包括鼠标穿透
SetWindowLong(_hwnd, GWL_EXSTYLE, WS_EX_TOPMOST | WS_EX_LAYERED | WS_EX_TRANSPARENT | WS_EX_TOOLWINDOW);
// 要取消鼠标穿透,重新设置窗体的扩展样式,将原始样式设置回去(不包括WS_EX_TRANSPARENT)
SetWindowLong(_hwnd, GWL_EXSTYLE, originalExStyle);
```
需注意的是,originalExStyle代表窗体在调用SetWindowLong函数前的扩展样式,需要在调用该函数之前保留该值,以便在取消鼠标穿透时恢复窗体的原始样式。
希望以上解答能对您有所帮助。
windll.user32.GetWindowLongPtr(hwnd, self.GWL_EXSTYLE)
这是一个 Windows API 函数调用,用于获取指定窗口的扩展风格。具体来说,它会返回一个指定窗口的扩展风格值,该值可以用于识别该窗口的一些特殊属性,如是否具有透明度、是否是工具窗口等等。
其中,`hwnd` 表示要获取扩展风格的窗口的句柄,`self.GWL_EXSTYLE` 是一个常量,表示要获取的扩展风格的类型,具体取值可以参考 Windows API 的文档。
需要注意的是,在 64 位 Windows 系统上,`GetWindowLongPtr` 函数会返回一个指针大小的值,而在 32 位系统上则返回一个 32 位的值。因此,为了保证代码的可移植性,建议使用 `GetWindowLongPtr` 而不是 `GetWindowLong`。
阅读全文