开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 2529|回复: 120
收起左侧

[易源码分享] 【纯源码】窗口靠边自动隐藏,QQ同款侧边栏效果

[复制链接]
结帖率:80% (4/5)
发表于 2026-5-31 22:57:59 | 显示全部楼层 |阅读模式   河南省焦作市
分享源码
界面截图: -
是否带模块: -
备注说明: -
窗口拖到屏幕边缘自动隐藏成细条,鼠标移上去自动弹出,和QQ/VX侧边栏效果一模一样。

码字不易,觉得好用的话麻烦点个好评,让我知道没白忙活~


1.纯源码,无任何模块依赖

2.支持四个方向:左、右、上、下

3.销毁时记得关闭隐藏效果

4.支持多个窗口独立使用,比如创建的窗口

5.自动修正窗口位置(移出屏幕部分自动归位).版本 2

.程序集 窗口程序集_启动窗口

.子程序 _按钮1_被单击

靠边隐藏开启 (_启动窗口.取窗口句柄 (), 5)  ' 5隐藏漏出来的宽度

.子程序 _按钮2_被单击

载入 (窗口1, , 假)

.子程序 __启动窗口_将被销毁

靠边隐藏关闭 (_启动窗口.取窗口句柄 ())

.子程序 靠边隐藏开启, 逻辑型, 公开
.参数 窗口句柄, 整数型
.参数 隐藏宽度, 整数型, 可空
.局部变量 新窗口过程, 子程序指针
.局部变量 已安装, 逻辑型

.如果真 (窗口句柄 = 0)
    返回 (假)
.如果真结束

已安装 = 读窗口数据 (窗口句柄, “靠边_已安装”) = 1
.如果真 (已安装)
    返回 (假)
.如果真结束
.如果真 (是否为空 (隐藏宽度))
    隐藏宽度 = 10
.如果真结束
.如果真 (隐藏宽度 < 2)
    隐藏宽度 = 2
.如果真结束
.如果真 (隐藏宽度 > 50)
    隐藏宽度 = 50
.如果真结束

写窗口数据 (窗口句柄, “靠边_隐藏条宽度”, 隐藏宽度)
写窗口数据 (窗口句柄, “靠边_正常宽度”, 取窗口宽度 (窗口句柄))
写窗口数据 (窗口句柄, “靠边_正常高度”, 取窗口高度 (窗口句柄))
写窗口数据 (窗口句柄, “靠边_正常左边”, 取窗口左边 (窗口句柄))
写窗口数据 (窗口句柄, “靠边_正常顶边”, 取窗口顶边 (窗口句柄))
新窗口过程 = &窗口过程回调_靠边
写窗口数据 (窗口句柄, “靠边_旧窗口过程”, SetWindowLongA (窗口句柄, -4, 到整数 (新窗口过程)))
写窗口数据 (窗口句柄, “靠边_定时器ID”, SetTimer (窗口句柄, 1, 50, 0))
写窗口数据 (窗口句柄, “靠边_已安装”, 1)
写窗口数据 (窗口句柄, “靠边_隐藏方向”, 0)
写窗口数据 (窗口句柄, “靠边_鼠标在窗口上”, 0)
写窗口数据 (窗口句柄, “靠边_正在隐藏”, 0)
写窗口数据 (窗口句柄, “靠边_禁止隐藏时间”, 0)
返回 (真)

.子程序 靠边隐藏关闭, 逻辑型, 公开
.参数 窗口句柄, 整数型
.局部变量 隐藏方向, 整数型
.局部变量 定时器ID, 整数型
.局部变量 旧窗口过程, 整数型
.局部变量 正常左边, 整数型
.局部变量 正常顶边, 整数型
.局部变量 正常宽度, 整数型
.局部变量 正常高度, 整数型
.局部变量 已安装, 逻辑型

.如果真 (窗口句柄 = 0)
    返回 (假)
.如果真结束
已安装 = 读窗口数据 (窗口句柄, “靠边_已安装”) = 1
.如果真 (已安装 = 假)
    返回 (假)
.如果真结束
隐藏方向 = 读窗口数据 (窗口句柄, “靠边_隐藏方向”)
.如果真 (隐藏方向 ≠ 0)
    正常左边 = 读窗口数据 (窗口句柄, “靠边_正常左边”)
    正常顶边 = 读窗口数据 (窗口句柄, “靠边_正常顶边”)
    正常宽度 = 读窗口数据 (窗口句柄, “靠边_正常宽度”)
    正常高度 = 读窗口数据 (窗口句柄, “靠边_正常高度”)
    MoveWindow (窗口句柄, 正常左边, 正常顶边, 正常宽度, 正常高度, 真)
.如果真结束
定时器ID = 读窗口数据 (窗口句柄, “靠边_定时器ID”)
.如果真 (定时器ID ≠ 0)
    KillTimer (窗口句柄, 定时器ID)
.如果真结束
旧窗口过程 = 读窗口数据 (窗口句柄, “靠边_旧窗口过程”)
.如果真 (旧窗口过程 ≠ 0 且 旧窗口过程 ≠ -1)
    SetWindowLongA (窗口句柄, -4, 旧窗口过程)
.如果真结束
写窗口数据 (窗口句柄, “靠边_已安装”, 0)
写窗口数据 (窗口句柄, “靠边_定时器ID”, 0)
写窗口数据 (窗口句柄, “靠边_旧窗口过程”, 0)
写窗口数据 (窗口句柄, “靠边_隐藏方向”, 0)
写窗口数据 (窗口句柄, “靠边_鼠标在窗口上”, 0)
写窗口数据 (窗口句柄, “靠边_正在隐藏”, 0)
写窗口数据 (窗口句柄, “靠边_正常宽度”, 0)
写窗口数据 (窗口句柄, “靠边_正常高度”, 0)
写窗口数据 (窗口句柄, “靠边_正常左边”, 0)
写窗口数据 (窗口句柄, “靠边_正常顶边”, 0)
写窗口数据 (窗口句柄, “靠边_隐藏条宽度”, 0)
写窗口数据 (窗口句柄, “靠边_禁止隐藏时间”, 0)
返回 (真)

.子程序 窗口过程回调_靠边, 整数型
.参数 窗口句柄, 整数型
.参数 消息, 整数型
.参数 参数1, 整数型
.参数 参数2, 整数型
.局部变量 返回值, 整数型
.局部变量 旧窗口过程, 整数型
.局部变量 定时器ID, 整数型
.局部变量 正在隐藏, 整数型

.判断开始 (消息 = 275)
    处理定时器_靠边 (窗口句柄)

.判断 (消息 = 561)
    定时器ID = 读窗口数据 (窗口句柄, “靠边_定时器ID”)
    .如果真 (定时器ID ≠ 0)
        KillTimer (窗口句柄, 定时器ID)
        写窗口数据 (窗口句柄, “靠边_定时器ID”, 0)
    .如果真结束

.判断 (消息 = 562)
    正在隐藏 = 读窗口数据 (窗口句柄, “靠边_正在隐藏”)
    .如果真 (正在隐藏 = 0)
        定时器ID = 读窗口数据 (窗口句柄, “靠边_定时器ID”)
        .如果真 (定时器ID = 0)
            写窗口数据 (窗口句柄, “靠边_定时器ID”, SetTimer (窗口句柄, 1, 50, 0))
        .如果真结束

    .如果真结束

.判断 (消息 = 2)
    定时器ID = 读窗口数据 (窗口句柄, “靠边_定时器ID”)
    .如果真 (定时器ID ≠ 0)
        KillTimer (窗口句柄, 定时器ID)
    .如果真结束
    旧窗口过程 = 读窗口数据 (窗口句柄, “靠边_旧窗口过程”)
    .如果真 (旧窗口过程 ≠ 0 且 旧窗口过程 ≠ -1)
        SetWindowLongA (窗口句柄, -4, 旧窗口过程)
    .如果真结束
    写窗口数据 (窗口句柄, “靠边_已安装”, 0)

.默认

.判断结束

旧窗口过程 = 读窗口数据 (窗口句柄, “靠边_旧窗口过程”)
.如果真 (旧窗口过程 ≠ 0 且 旧窗口过程 ≠ -1)
    返回值 = CallWindowProcA (旧窗口过程, 窗口句柄, 消息, 参数1, 参数2)
.如果真结束
返回 (返回值)

.子程序 处理定时器_靠边
.参数 窗口句柄, 整数型
.局部变量 鼠标坐标, POINT
.局部变量 窗口矩形, RECT
.局部变量 鼠标在内, 逻辑型
.局部变量 当前方向, 整数型
.局部变量 隐藏方向, 整数型
.局部变量 鼠标在窗口上, 整数型
.局部变量 正常左边, 整数型
.局部变量 正常顶边, 整数型
.局部变量 正常宽度, 整数型
.局部变量 正常高度, 整数型
.局部变量 隐藏条宽度, 整数型
.局部变量 屏幕宽, 整数型
.局部变量 屏幕高, 整数型
.局部变量 禁止时间, 整数型
.局部变量 当前时间, 整数型

GetCursorPos (鼠标坐标)
GetWindowRect (窗口句柄, 窗口矩形)

鼠标在内 = 鼠标坐标.横 ≥ 窗口矩形.左边 且 鼠标坐标.横 ≤ 窗口矩形.右边 且 鼠标坐标.纵 ≥ 窗口矩形.顶边 且 鼠标坐标.纵 ≤ 窗口矩形.底边
隐藏方向 = 读窗口数据 (窗口句柄, “靠边_隐藏方向”)
鼠标在窗口上 = 读窗口数据 (窗口句柄, “靠边_鼠标在窗口上”)
当前时间 = GetTickCount ()
.如果 (鼠标在内)
    鼠标在窗口上 = 1
    写窗口数据 (窗口句柄, “靠边_鼠标在窗口上”, 1)
    .如果真 (隐藏方向 ≠ 0)
        正常左边 = 读窗口数据 (窗口句柄, “靠边_正常左边”)
        正常顶边 = 读窗口数据 (窗口句柄, “靠边_正常顶边”)
        正常宽度 = 读窗口数据 (窗口句柄, “靠边_正常宽度”)
        正常高度 = 读窗口数据 (窗口句柄, “靠边_正常高度”)
        MoveWindow (窗口句柄, 正常左边, 正常顶边, 正常宽度, 正常高度, 真)
        写窗口数据 (窗口句柄, “靠边_隐藏方向”, 0)
        写窗口数据 (窗口句柄, “靠边_禁止隐藏时间”, 当前时间 + 500)
    .如果真结束

.否则
    .如果真 (鼠标在窗口上 = 1)
        鼠标在窗口上 = 0
        写窗口数据 (窗口句柄, “靠边_鼠标在窗口上”, 0)
    .如果真结束

    .如果真 (隐藏方向 = 0)
        禁止时间 = 读窗口数据 (窗口句柄, “靠边_禁止隐藏时间”)
        .如果真 (当前时间 < 禁止时间)
            返回 ()
        .如果真结束

        当前方向 = 检测靠边方向 (窗口句柄, 窗口矩形)
        .如果真 (当前方向 ≠ 0)
            执行隐藏_靠边 (窗口句柄, 当前方向)
            写窗口数据 (窗口句柄, “靠边_隐藏方向”, 当前方向)
        .如果真结束

    .如果真结束

.如果结束


.子程序 检测靠边方向, 整数型
.参数 窗口句柄, 整数型
.参数 窗口矩形, RECT
.局部变量 屏幕宽, 整数型
.局部变量 屏幕高, 整数型
.局部变量 窗口宽, 整数型
.局部变量 窗口高, 整数型
.局部变量 隐藏条宽度, 整数型

窗口宽 = 窗口矩形.右边 - 窗口矩形.左边
窗口高 = 窗口矩形.底边 - 窗口矩形.顶边
隐藏条宽度 = 读窗口数据 (窗口句柄, “靠边_隐藏条宽度”)
.如果真 (窗口宽 ≤ 隐藏条宽度 × 3 或 窗口高 ≤ 隐藏条宽度 × 3)
    返回 (0)
.如果真结束

屏幕宽 = GetSystemMetrics (0)
屏幕高 = GetSystemMetrics (1)
.如果真 (窗口矩形.左边 ≤ 10)
    返回 (1)
.如果真结束
.如果真 (屏幕宽 - 窗口矩形.右边 ≤ 10)
    返回 (2)
.如果真结束
.如果真 (窗口矩形.顶边 ≤ 10)
    返回 (3)
.如果真结束
.如果真 (屏幕高 - 窗口矩形.底边 ≤ 10)
    返回 (4)
.如果真结束

返回 (0)


.子程序 执行隐藏_靠边
.参数 窗口句柄, 整数型
.参数 方向, 整数型
.局部变量 屏幕宽, 整数型
.局部变量 屏幕高, 整数型
.局部变量 正常左边, 整数型
.局部变量 正常顶边, 整数型
.局部变量 正常宽度, 整数型
.局部变量 正常高度, 整数型
.局部变量 隐藏条宽度, 整数型
.局部变量 新左边, 整数型
.局部变量 新顶边, 整数型
.局部变量 当前宽度, 整数型
.局部变量 当前高度, 整数型


当前宽度 = 取窗口宽度 (窗口句柄)
当前高度 = 取窗口高度 (窗口句柄)
隐藏条宽度 = 读窗口数据 (窗口句柄, “靠边_隐藏条宽度”)

.如果真 (当前宽度 ≤ 隐藏条宽度 + 5 或 当前高度 ≤ 隐藏条宽度 + 5)
    返回 ()
.如果真结束
正常左边 = 取窗口左边 (窗口句柄)
正常顶边 = 取窗口顶边 (窗口句柄)
正常宽度 = 取窗口宽度 (窗口句柄)
正常高度 = 取窗口高度 (窗口句柄)
屏幕宽 = GetSystemMetrics (0)
屏幕高 = GetSystemMetrics (1)

.如果真 (正常左边 < 0)
    正常左边 = 0
.如果真结束
.如果真 (正常顶边 < 0)
    正常顶边 = 0
.如果真结束
.如果真 (正常左边 + 正常宽度 > 屏幕宽)
    正常左边 = 屏幕宽 - 正常宽度
.如果真结束
.如果真 (正常顶边 + 正常高度 > 屏幕高)
    正常顶边 = 屏幕高 - 正常高度
.如果真结束
写窗口数据 (窗口句柄, “靠边_正常左边”, 正常左边)
写窗口数据 (窗口句柄, “靠边_正常顶边”, 正常顶边)
写窗口数据 (窗口句柄, “靠边_正常宽度”, 正常宽度)
写窗口数据 (窗口句柄, “靠边_正常高度”, 正常高度)
写窗口数据 (窗口句柄, “靠边_正在隐藏”, 1)

.判断开始 (方向 = 1)  ' 左
    新左边 = 0 - 正常宽度 + 隐藏条宽度
    MoveWindow (窗口句柄, 新左边, 正常顶边, 正常宽度, 正常高度, 真)

.判断 (方向 = 2)  ' 右
    新左边 = 屏幕宽 - 隐藏条宽度
    MoveWindow (窗口句柄, 新左边, 正常顶边, 正常宽度, 正常高度, 真)

.判断 (方向 = 3)  ' 上
    新顶边 = 0 - 正常高度 + 隐藏条宽度
    MoveWindow (窗口句柄, 正常左边, 新顶边, 正常宽度, 正常高度, 真)

.判断 (方向 = 4)  ' 下
    新顶边 = 屏幕高 - 隐藏条宽度
    MoveWindow (窗口句柄, 正常左边, 新顶边, 正常宽度, 正常高度, 真)

.默认

.判断结束

写窗口数据 (窗口句柄, “靠边_正在隐藏”, 0)

.子程序 写窗口数据
.参数 窗口句柄, 整数型
.参数 名称, 文本型
.参数 值, 整数型

SetPropA (窗口句柄, 名称, 值)

.子程序 读窗口数据, 整数型
.参数 窗口句柄, 整数型
.参数 名称, 文本型

返回 (GetPropA (窗口句柄, 名称))

.子程序 取窗口宽度, 整数型
.参数 窗口句柄, 整数型
.局部变量 矩形, RECT

GetWindowRect (窗口句柄, 矩形)
返回 (矩形.右边 - 矩形.左边)

.子程序 取窗口高度, 整数型
.参数 窗口句柄, 整数型
.局部变量 矩形, RECT

GetWindowRect (窗口句柄, 矩形)
返回 (矩形.底边 - 矩形.顶边)

.子程序 取窗口左边, 整数型
.参数 窗口句柄, 整数型
.局部变量 矩形, RECT

GetWindowRect (窗口句柄, 矩形)
返回 (矩形.左边)

.子程序 取窗口顶边, 整数型
.参数 窗口句柄, 整数型
.局部变量 矩形, RECT

GetWindowRect (窗口句柄, 矩形)
返回 (矩形.顶边)
.版本 2

.DLL命令 GetWindowLongA, 整数型, "user32.dll", "GetWindowLongA"
    .参数 窗口句柄, 整数型
    .参数 nIndex, 整数型

.DLL命令 SetWindowLongA, 整数型, "user32.dll", "SetWindowLongA"
    .参数 窗口句柄, 整数型
    .参数 nIndex, 整数型
    .参数 dwNewValue, 整数型

.DLL命令 CallWindowProcA, 整数型, "user32.dll", "CallWindowProcA"
    .参数 原窗口过程, 整数型
    .参数 窗口句柄, 整数型
    .参数 消息, 整数型
    .参数 参数1, 整数型
    .参数 参数2, 整数型

.DLL命令 SetTimer, 整数型, "user32.dll", "SetTimer"
    .参数 窗口句柄, 整数型
    .参数 事件标识符, 整数型
    .参数 毫秒数, 整数型
    .参数 回调函数地址, 整数型

.DLL命令 KillTimer, 逻辑型, "user32.dll", "KillTimer"
    .参数 窗口句柄, 整数型
    .参数 事件标识符, 整数型

.DLL命令 GetCursorPos, 逻辑型, "user32.dll", "GetCursorPos"
    .参数 鼠标坐标, POINT

.DLL命令 GetWindowRect, 逻辑型, "user32.dll", "GetWindowRect"
    .参数 窗口句柄, 整数型
    .参数 窗口矩形, RECT

.DLL命令 GetSystemMetrics, 整数型, "user32.dll", "GetSystemMetrics"
    .参数 nIndex, 整数型

.DLL命令 MoveWindow, 逻辑型, "user32.dll", "MoveWindow"
    .参数 窗口句柄, 整数型
    .参数 左边, 整数型
    .参数 顶边, 整数型
    .参数 宽度, 整数型
    .参数 高度, 整数型
    .参数 是否重画, 逻辑型

.DLL命令 SetPropA, 逻辑型, "user32.dll", "SetPropA"
    .参数 窗口句柄, 整数型
    .参数 字符串, 文本型
    .参数 数据, 整数型

.DLL命令 GetPropA, 整数型, "user32.dll", "GetPropA"
    .参数 窗口句柄, 整数型
    .参数 字符串, 文本型

.DLL命令 GetTickCount, 整数型, "kernel32.dll", "GetTickCount"
.版本 2

.数据类型 RECT
    .成员 左边, 整数型
    .成员 顶边, 整数型
    .成员 右边, 整数型
    .成员 底边, 整数型

.数据类型 POINT
    .成员 横, 整数型
    .成员 纵, 整数型

靠边隐藏.e

93.92 KB, 下载次数: 92, 下载积分: 精币 -2 枚

评分

参与人数 7精币 +7 收起 理由
xhping + 1 感谢分享,很给力!~
cbl521ysys + 1 感谢分享,很给力!~
恒大大 + 1 感谢分享,很给力!~
文西哥 + 1 感谢分享,很给力!~
风雨3137 + 1 感谢分享,很给力!~
cui870222829 + 1 感谢分享,很给力!~
zjbin1989 + 1 感谢分享,很给力!~

查看全部评分


本帖被以下淘专辑推荐:

结帖率:80% (4/5)

签到天数: 2 天

 楼主| 发表于 2026-5-31 23:03:55 | 显示全部楼层   河南省焦作市
易语言给我自动加模块了, 不用管他 删除了就行  或者直接复制源码 就能用  大意了
回复 支持 反对

使用道具 举报

结帖率:0% (0/9)

签到天数: 8 天

发表于 2026-6-29 22:45:06 | 显示全部楼层   云南省曲靖市
1.纯源码,无任何模块依赖
回复 支持 反对

使用道具 举报

结帖率:100% (27/27)

签到天数: 23 天

发表于 2026-6-26 15:42:44 | 显示全部楼层   浙江省宁波市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

签到天数: 19 天

发表于 2026-6-25 18:52:47 | 显示全部楼层   广西壮族自治区百色市
感谢分享
回复 支持 反对

使用道具 举报

签到天数: 17 天

发表于 2026-6-12 16:28:57 | 显示全部楼层   湖南省长沙市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 2 天

发表于 2026-6-12 11:31:53 | 显示全部楼层   重庆市重庆市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:80% (4/5)

签到天数: 2 天

 楼主| 发表于 2026-6-10 18:21:33 | 显示全部楼层   河南省焦作市
几天没来 这么多人看吗
回复 支持 反对

使用道具 举报

结帖率:79% (27/34)

签到天数: 2 天

发表于 2026-6-9 12:13:49 | 显示全部楼层   河南省洛阳市
#在这里快速回复#感谢分享,很给力!~
回复 支持 反对

使用道具 举报

签到天数: 16 天

发表于 2026-6-8 21:32:09 | 显示全部楼层   湖北省*

感谢分享
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)

签到天数: 20 天

发表于 2026-6-8 10:01:27 | 显示全部楼层   广东省汕头市
感谢大神分享~!
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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