开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 174|回复: 7
收起左侧

[易语言] 窗口菜单如何持续获取焦点呢?

[复制链接]
结帖率:91% (102/112)
发表于 3 天前 | 显示全部楼层 |阅读模式   河北省保定市
10精币
窗口菜单或者窗口选中的时候是黑的,但是鼠标点出窗口后就变灰了,怎么让这个窗口菜单一直是黑的呢?

VX截图_20250609221933.png

回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:0% (0/1)

签到天数: 12 天

发表于 3 天前 | 显示全部楼层   河北省保定市
如果是想一直处于激活状态的话,就在失去焦点时加个激活
  
子程序名返回值类型公开备 注
__启动窗口_失去焦点  
_启动窗口.激活 ()



在不就是我理解错了
回复

使用道具 举报

结帖率:83% (25/30)

签到天数: 6 天

发表于 前天 00:02 | 显示全部楼层   河南省周口市
这是Win系统默认行为, 没办法取消. 但是可以在窗口失去焦点的时候再获取一下焦点来抵消
  
子程序名返回值类型公开备 注
__启动窗口_失去焦点  
_启动窗口.获取焦点 ()
回复

使用道具 举报

签到天数: 10 天

发表于 前天 03:30 | 显示全部楼层   海南省白沙黎族自治县
把你的那五个菜单可视全设为假,,在同样的位置放五个按钮或标签,,按钮或标签响应单击或鼠标左键被按下事件里写上,弹出菜单(文件,),,等等等,这样就可以实现你的想法了。
  
子程序名返回值类型公开备 注
_标签_文件_鼠标左键被按下逻辑型 
参数名类 型参考可空数组备 注
横向位置整数型
纵向位置整数型
功能键状态整数型
弹出菜单 (文件, , )
子程序名返回值类型公开备 注
_标签_默认坐标_鼠标左键被按下逻辑型 
参数名类 型参考可空数组备 注
横向位置整数型
纵向位置整数型
功能键状态整数型
弹出菜单 (默认坐标, , )

回复

使用道具 举报

签到天数: 10 天

发表于 前天 03:33 | 显示全部楼层   海南省白沙黎族自治县
这样窗口没有焦点时,菜单看起来也是黑色的
回复

使用道具 举报

签到天数: 10 天

发表于 前天 03:34 | 显示全部楼层   海南省白沙黎族自治县
这样窗口没有焦点时,菜单看起来也是黑色的,图片



补充内容 (2025-6-10 03:37):
甚至你还可以让菜单名称五颜六色。。。
伪菜单.png
回复

使用道具 举报

结帖率:100% (1/1)

签到天数: 12 天

发表于 前天 11:41 | 显示全部楼层   河南省郑州市
加个皮肤就可以了

比如
  
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
未闻花名_皮肤加载 (3, , , , )


❤️未闻花名皮肤模块3.6✅质量更新
https://bbs.125.la/forum.php?mod=viewthread&tid=14837016
(出处: 精易论坛)
回复

使用道具 举报

结帖率:55% (11/20)

签到天数: 7 天

发表于 前天 18:35 | 显示全部楼层   浙江省湖州市
### 易语言窗口菜单焦点保持方案

在易语言中,窗口菜单默认会在窗口失去焦点时变灰,这是Windows的标准行为。不过,我们可以通过一些技巧来模拟菜单始终保持焦点的效果。以下是几种可行的方法:

### 方案一:使用定时器刷新菜单状态

这是最简单的实现方式,通过定时器不断检查并设置菜单状态:

```易语言
.版本 2
.支持库 eAPI

.子程序 __启动窗口_创建完毕

' 创建定时器,每200毫秒检查一次菜单状态
启动窗口定时器 (1, 200)

.子程序 _窗口定时器_周期事件, 整数型
.参数 定时器ID, 整数型

.如果真 (定时器ID = 1)
    ' 检查窗口是否激活,如果未激活则模拟激活状态
    .如果 (取窗口状态 (取运行窗口句柄 ()) ≠ #窗口状态_激活)
        ' 获取菜单句柄
        菜单句柄 = GetMenu (取运行窗口句柄 ())
        
        ' 重绘菜单,使其保持高亮状态
        DrawMenuBar (取运行窗口句柄 ())
    .如果结束
.如果真结束
```

### 方案二:拦截窗口消息,修改菜单绘制逻辑

更高级的方法是通过拦截窗口消息来修改菜单的默认行为:

```易语言
.版本 2
.支持库 eAPI

.子程序 __启动窗口_创建完毕

' 安装窗口子类,用于拦截窗口消息
窗口子类句柄 = SetWindowSubclass (取运行窗口句柄 (), &窗口过程, 1, 0)

.子程序 窗口过程, 整数型, 公开, 窗口消息处理过程
.参数 hWnd, 整数型, 窗口句柄
.参数 uMsg, 整数型, 消息类型
.参数 wParam, 整数型, 消息参数
.参数 lParam, 整数型, 消息参数
.参数 uIdSubclass, 整数型, 子类ID
.参数 dwRefData, 整数型, 引用数据

.如果 (uMsg = #WM_ACTIVATE)
    ' 拦截窗口激活/非激活消息
    .如果 (wParam = #WA_INACTIVE)
        ' 当窗口失去焦点时,模拟菜单仍处于激活状态
        菜单句柄 = GetMenu (hWnd)
        DrawMenuBar (hWnd)
        
        ' 返回0,表示已处理该消息
        返回 (0)
    .如果结束
.如果结束

' 其他消息使用默认处理
返回 (DefSubclassProc (hWnd, uMsg, wParam, lParam))
```

### 方案三:使用自定义菜单控件

如果以上方法都不理想,可以考虑使用自定义菜单控件完全替代系统菜单:

```易语言
.版本 2
.支持库 eAPI
.支持库 eGUI

.子程序 __启动窗口_创建完毕

' 创建自定义菜单面板
菜单面板.创建 (0, 0, 取窗口宽度 (取运行窗口句柄 ()), 25, 取运行窗口句柄 ())
菜单面板.置可视 (真)

' 添加菜单项
添加菜单项 (菜单面板, "文件(&F)", 1001)
添加菜单项 (菜单面板, "编辑(&E)", 1002)
添加菜单项 (菜单面板, "查看(&V)", 1003)

.子程序 添加菜单项, 整数型, 公开, 添加自定义菜单项
.参数 菜单容器, 整数型, 菜单面板句柄
.参数 标题, 文本型, 菜单项标题
.参数 菜单项ID, 整数型, 菜单项ID

.局部变量 按钮句柄, 整数型

' 创建菜单项按钮
按钮句柄 = 按钮.创建 (标题, 0, 0, 文本长度 (标题) * 12 + 20, 25, 菜单容器)
按钮.置可视 (按钮句柄, 真)
按钮.置风格 (按钮句柄, #按钮风格_扁平)

' 记录菜单项ID
置窗口数据 (按钮句柄, 菜单项ID)

' 设置菜单项位置(水平排列)
.局部变量 菜单项数量, 整数型
.局部变量 当前X坐标, 整数型

菜单项数量 = 取窗口数据 (菜单容器, 100) + 1
置窗口数据 (菜单容器, 100, 菜单项数量)

当前X坐标 = (菜单项数量 - 1) * 80
置窗口位置 (按钮句柄, 当前X坐标, 0)

' 设置菜单项事件
按钮.置回调 (按钮句柄, &菜单项_被单击)

返回 (按钮句柄)

.子程序 菜单项_被单击, 整数型, 公开, 菜单项点击事件处理
.参数 控件ID, 整数型

.局部变量 菜单项ID, 整数型
菜单项ID = 取窗口数据 (控件ID, 0)

' 处理菜单项点击事件
.判断开始 (菜单项ID)
    .判断 (1001)
        ' 处理"文件"菜单点击
    .判断 (1002)
        ' 处理"编辑"菜单点击
    .判断 (1003)
        ' 处理"查看"菜单点击
.判断结束
```

### 实现建议

1. **优先尝试方案一**:这是最简单的实现方式,适合快速验证效果
2. **性能考虑**:如果使用定时器,注意设置合适的间隔时间,避免过度消耗资源
3. **兼容性**:不同Windows版本可能对菜单绘制有不同的处理方式,建议在多种环境下测试
4. **自定义菜单的优势**:方案三虽然实现复杂,但可以获得最佳的控制效果和视觉一致性

无论选择哪种方案,都可能需要根据实际情况进行调整和优化。如果需要更精确的控制,可能还需要结合Windows API进行更底层的操作。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表