c++ - 如何让焦点重新回到透明(ClickThrough 启用)窗口
问题描述
我正在开发一个窗口最初是透明的应用程序,然后在按键上(比如说shift+tab
)窗口应该是Not ClickThrough
。我用来获取ClickThrough
的代码如下:
_hwnd = CreateWindowEx(WS_EX_LAYERED | WS_EX_TRANSPARENT,
TEXT("Example"),
title, WS_BORDER,
GetSystemMetrics(SM_CXSCREEN) / 2 - _width / 2,
GetSystemMetrics(SM_CYSCREEN) / 2 - _height / 2,
_width, _height,
NULL, NULL,
NULL, NULL);
int opacity = 70;
SetLayeredWindowAttributes(_hwnd, 0, (255 * opacity) / 100, LWA_ALPHA);
现在,有什么解决方案可以得到Not ClickThrough
吗?我谷歌它,但从来没有找到任何一个。
解决方案
是的,我已经使用注册HotKeys做到了这一点:WndProc如下:
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
{
switch (message)
{
//break;
case WM_HOTKEY:
{
switch (wparam)
{
case 1:// Close Window
PostQuitMessage(0);
break;
case 2://Disable ClickThrough
SetWindowLong(hwnd, -20, WS_EX_LAYERED); //-16 for window style
break;
case 3://enable ClickThrough
SetWindowLong(hwnd, -20, WS_EX_LAYERED | WS_EX_TRANSPARENT);
break;
}
}
break;
case WM_CLOSE:
{
DestroyWindow(hwnd);
return 0;
}
break;
default:
return DefWindowProc(hwnd, message, wparam, lparam);
}
}
注册热键如下:
RegisterHotKey(_hwnd, 1, MOD_SHIFT, 0x43); //shift + c
RegisterHotKey(_hwnd, 2, MOD_SHIFT, 0x44); //shift + d
RegisterHotKey(_hwnd, 3, MOD_SHIFT, 0x45); //shift + e
推荐阅读
- python - 在 spyder 中导入 pdftotext 模块时出错
- javascript - 在页面重新加载时重置渲染 UseEffect 和 Css
- python - 修复导入moviepy.editor
- windows - 在 CLion 中组装 .asm 文件时出现 CMake 问题
- sql - 使用 SQL 对具有共同状态的连续项目进行分组(包括虚拟数据)
- javascript - 为什么我的 vue.app 没有出现在部署版本中?
- flutter - 当我“运行”时,它会在 Flutter 中出现错误。附照片
- python - 保存时使用 Python PIL“质量”参数时,PNG 文件大小是否应该保持静态?
- python - 文本文件中的重复行
- algorithm - 保存向前和向后滚动的元素序列的最佳方法是什么?