Skip to content

feat: 新增多老板键与透明背景(含「开启/关闭透明」快捷键) - #280

Open
James-ctrl-Doyle wants to merge 1 commit into
binbyu:masterfrom
James-ctrl-Doyle:pr-feature
Open

James-ctrl-Doyle wants to merge 1 commit into
binbyu:masterfrom
James-ctrl-Doyle:pr-feature

Conversation

@James-ctrl-Doyle

Copy link
Copy Markdown

这个 PR 做了什么

新增两个功能,并配套一处兼容性重构。

1. 多老板键

原本只有一个老板键(Alt+H)。现在支持配置 4 个,都可一键隐藏/恢复全部窗口:

序号 默认快捷键
老板键 1 Alt+H
老板键 2 Ctrl+Alt+H
老板键 3 Ctrl+Shift+H
老板键 4 Alt+Q

在【按键设置】→「热键设置」分组里可逐项启用/改键。

2. 透明背景

【显示设置】→ 背景颜色 →「透明背景(需隐藏边框)

  • 背景完全透明、文字保持不透明(文字仍由 _textAlpha 独立合成)
  • 透明区域点击可穿透到下层窗口:背景位图 alpha 置 0 后由 UpdateLayeredWindow 自动实现,无需额外命中测试
  • 与边框状态解耦:按 F12 隐藏边框时生效,恢复边框时暂停,可随时来回切换,不需要反复回设置里勾选

说明:Windows 的标题栏由系统绘制,走不了逐像素透明,所以该功能要求无边框模式(这也是标签里写「需隐藏边框」的原因)。

配套新增快捷键「开启/关闭透明」,默认 F9、默认关闭。

3. 配置槽与数组下标解耦(兼容性关键)

g_Keysets 的配置槽原先按数组下标取(g_Keysets[i]keyset[i]),因此在数组中间插入新键会让所有后续键的配置槽整体错位 —— 而 keyset[] 是按位置序列化进 JSON 的,老用户升级后原有快捷键会被"平移"解释成别的功能。

改为按条目内的 keyid 取槽:

static int _keyset_slot(const keydata_t *kd)
{
    int kid = (int)HIWORD(kd->key);
    return (kid >= 0 && kid < MAX_KEYSET_COUNT) ? kid : -1;
}

这样新增按键不会移动任何已有键的配置槽,老配置文件升级后原有快捷键的含义与开关状态完全不变

4. 启动守卫

无边框模式下菜单栏会被移除(SetMenu(hWnd, NULL)),返回有边框只能靠「隐藏/显示边框」快捷键。若该键被禁用就会永久锁死,因此启动时若发现「无边框 + 该键被禁用」会自动恢复启用,保证菜单永远可达。

5. 默认启用的快捷键

  • 默认启用:老板键1 (Alt+H)、隐藏/显示边框 (F12)、上一页/下一页 (←/→)、上n行/下n行 (↑/↓)
  • 其余(含新增的老板键 2~4 与透明开关)默认关闭,可在【按键设置】中开启

关于资源文件

Reader_zh-cn.rcresource.h 是 UTF-16 资源文件,上述几个功能都有改动、无法按功能拆分,所以合并在同一个提交里。新增控件 ID 取 1180~1188,避开主线已占用的 1170~1176(Web 阅读)。

测试情况

  • Visual Studio 2022 工具集(v145)+ Windows SDK 10.0.26100 编译通过(Release|Win32)
  • 实测启动、退出落盘正常;keyset 序列化为 22 个槽,新增键的槽位为默认值
  • 手工构造「老版本 21 槽配置」验证升级兼容:0~20 槽含义逐项不变,新增槽自动补默认值
  • 默认值校验:18 个老键位只有 6 个默认启用,与上面第 5 节一致

补充

如果只想看更小的改动,第 3 节(配置槽解耦)是可单独拆出来的修复 —— 在引入新按键之前,它本身就是一个独立的老配置兼容性修复。

一、多老板键
- 支持配置 4 个老板键(默认 Alt+H,可另设 Ctrl+Alt+H / Ctrl+Shift+H / Alt+Q),
  均可一键隐藏/恢复全部窗口
- 新增 KI_HIDE2~KI_HIDE4 枚举、对应控件 ID 与字符串资源

二、透明背景(【显示设置】→ 背景颜色 →「透明背景(需隐藏边框)」)
- 开启后背景位图 alpha 置 0:背景透明、文字仍不透明;透明区域由
  UpdateLayeredWindow 自动点击穿透,无需额外命中测试
- 新增 header.transparent_bg 字段并接入 JSON 持久化(老配置安全取默认 0)
- 与边框解耦:F12 隐藏边框时生效、恢复边框时暂停,可随时来回切换

三、新增快捷键「开启/关闭透明」(默认 F9、默认禁用)

四、配置槽与数组下标解耦(兼容性关键点)
- g_Keysets 的配置槽改由条目内 keyid(HIWORD(key))决定,不再依赖数组下标,
  新增按键不会移动任何已有键的配置槽
- 因此老版本配置文件升级后,原有快捷键的含义与开关状态保持不变

五、默认启用的快捷键
- 默认启用:老板键1 (Alt+H)、隐藏/显示边框 (F12)、上一页/下一页 (←/→)、
  上n行/下n行 (↑/↓)
- 其余按键(包括新增的老板键2~4 与透明开关)默认关闭,可在【按键设置】中开启

说明:Reader_zh-cn.rc / resource.h 为 UTF-16 资源文件,上述功能均有改动且无法
按功能拆分,故合并在同一提交中;新增控件 ID 取 1180~1188,避开主线已占用的
1170~1176。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant