壹盾安全Cdn,小栗子论坛都在使用的Cdn
10核32G挂机宝5元|低价服务器|代理更优惠|自主研发|
【推荐】 SUB·优质插件 目录导航点击留言举报社区广告(周末处理)

【插件开发】窗口子类化 - 让框架本体自由移动吧

[复制链接]
查看: 433   回复: 18
HJH201314 发表于 2021-7-25 16:10:24 | 显示全部楼层 |阅读模式
本帖最后由 HJH201314 于 2021-8-19 11:48 编辑

本帖以<小栗子开发空壳>举例长期苦于载入窗口后没法移动,稍微研究了一下,看到论坛大概也许可能好像没有窗口子类化的教程,我就发出来了,大佬们不喜勿喷,有错误欢迎指出!
更正:该方法仅实现了窗口子类化,实际上对解决无边框窗口在“载入(,,假)”时无法操作的问题无效,请勿学习!!!!!建议使用EXUI,可以在有边框窗口下做出无边框窗口的效果!!!!!
众所周知,我们可以在<主程序集>的<插件菜单>函数中使用
载入 (窗口, ,假)
载入 (窗口, ,假)

来载入插件的窗口。

然而,正如开发空壳中注释所说,(对话框方式 即<载入>命令的第三个参数)
载入窗口,对话框方式假:无边框窗口无法移动、窗口组件的大部分事件无效,不影响框架移动、点击
载入窗口,对话框方式真:无边框窗口能够移动、窗口组件的拓展事件均有效,但影响框架主界面,启动插件菜单后框架主界面将无法移动、点击
使用[窗口子类化],即可实现对话框方式假,但窗口组件事件全部有效、不影响框架主界面

可见,仅仅使用<载入>命令要么会导致插件菜单窗口大部分失效,要么会导致框架本体无法移动、无法最小化、响应双击事件等。这时候就需要[窗口子类化]了。窗口子类化相关的解释可以自行搜索,简单来说就是通过窗口子类化可以让窗口实现原本基础指令无法实现的功能。
下面附上源码:

<DLL命令定义表>
.版本 2
.DLL命令 SetWindowLongA, 整数型, "user32.dll", "SetWindowLongA", , 改变指定窗口的属性,函数也将指定的一个32位值设置在窗口的额外存储空间的指定偏移位置。
    .参数 hWnd, 整数型, , 窗口句柄及间接给出的窗口所属的类。
    .参数 nIndex, 整数型, , 指定将设定的大于等于0的偏移值。
    .参数 dwNewLong, 整数型, , 指定的替换值。
.DLL命令 GetWindowLongA, 长整数型, "user32.dll", "GetWindowLongA", , 获得有关指定窗口的信息,函数也获得在额外窗口内存中指定偏移位地址的32位度整型值
    .参数 hWnd, 整数型, , 窗口句柄及间接给出的窗口所属的窗口类。
    .参数 nIndex, 整数型, , 指定要获得值的大于等于0的值的偏移量。

.DLL命令 CallWindowProcA, 整数型, "user32.dll", "CallWindowProcA", , 呼叫窗口函数地址
    .参数 lpPrevWndFunc, 整数型, , 前一窗口函数地址
    .参数 hWnd, 整数型, , 窗口句柄
    .参数 Msg, 整数型, , 消息值
    .参数 wParam, 整数型, , 附加参数1
    .参数 lParam, 整数型, , 附加参数2
.版本 2
.DLL命令 SetWindowLongA, 整数型, "user32.dll", "SetWindowLongA", , 改变指定窗口的属性,函数也将指定的一个32位值设置在窗口的额外存储空间的指定偏移位置。
    .参数 hWnd, 整数型, , 窗口句柄及间接给出的窗口所属的类。
    .参数 nIndex, 整数型, , 指定将设定的大于等于0的偏移值。
    .参数 dwNewLong, 整数型, , 指定的替换值。
.DLL命令 GetWindowLongA, 长整数型, "user32.dll", "GetWindowLongA", , 获得有关指定窗口的信息,函数也获得在额外窗口内存中指定偏移位地址的32位度整型值
    .参数 hWnd, 整数型, , 窗口句柄及间接给出的窗口所属的窗口类。
    .参数 nIndex, 整数型, , 指定要获得值的大于等于0的值的偏移量。

.DLL命令 CallWindowProcA, 整数型, "user32.dll", "CallWindowProcA", , 呼叫窗口函数地址
    .参数 lpPrevWndFunc, 整数型, , 前一窗口函数地址
    .参数 hWnd, 整数型, , 窗口句柄
    .参数 Msg, 整数型, , 消息值
    .参数 wParam, 整数型, , 附加参数1
    .参数 lParam, 整数型, , 附加参数2


<主程序集>下的<插件菜单>函数
.版本 2

.子程序 插件菜单, 整数型, , 插件菜单

.如果 (是否已创建 (控制面板))
    控制面板.可视 = 真
.否则
    载入 (控制面板, , 假)
    控制面板.可视 = 真
.版本 2

.子程序 插件菜单, 整数型, , 插件菜单

.如果 (是否已创建 (控制面板))
    控制面板.可视 = 真
.否则
    载入 (控制面板, , 假)
    控制面板.可视 = 真


<窗口程序集>
.版本 2

.程序集 窗口程序集_控制面板
.程序集变量 窗口句柄, 整数型
.程序集变量 窗口过程, 整数型
.程序集变量 defaultProc, 整数型

.子程序 _控制面板_创建完毕, , , 执行窗口子类化以及载入数据

窗口句柄 = 控制面板.取窗口句柄 ()
窗口过程 = GetWindowLongA (窗口句柄, -4)
defaultProc = SetWindowLongA (窗口句柄, -4, 到整数 (&windowProc))
' 下方执行窗口载入代码(加载数据等)
' 启动线程 (&windowLoader, , )

.子程序 _控制面板_将被销毁, , , 撤销窗口子类化

SetWindowLongA (窗口句柄, -4, defaultProc)

.子程序 windowProc, 整数型
.参数 hwnd, 整数型
.参数 msg, 整数型
.参数 wparam, 整数型
.参数 lparam, 整数型


返回 (CallWindowProcA (窗口过程, hwnd, msg, wparam, lparam))

.子程序 windowLoader, , , 窗口加载线程(若加载项不多,直接在 _控制面板_创建完毕 中加载数据也不是不行)

' 加载数据
.版本 2

.程序集 窗口程序集_控制面板
.程序集变量 窗口句柄, 整数型
.程序集变量 窗口过程, 整数型
.程序集变量 defaultProc, 整数型

.子程序 _控制面板_创建完毕, , , 执行窗口子类化以及载入数据

窗口句柄 = 控制面板.取窗口句柄 ()
窗口过程 = GetWindowLongA (窗口句柄, -4)
defaultProc = SetWindowLongA (窗口句柄, -4, 到整数 (&windowProc))
' 下方执行窗口载入代码(加载数据等)
' 启动线程 (&windowLoader, , )

.子程序 _控制面板_将被销毁, , , 撤销窗口子类化

SetWindowLongA (窗口句柄, -4, defaultProc)

.子程序 windowProc, 整数型
.参数 hwnd, 整数型
.参数 msg, 整数型
.参数 wparam, 整数型
.参数 lparam, 整数型


返回 (CallWindowProcA (窗口过程, hwnd, msg, wparam, lparam))

.子程序 windowLoader, , , 窗口加载线程(若加载项不多,直接在 _控制面板_创建完毕 中加载数据也不是不行)

' 加载数据


源码(根据小栗子SDK 3.5.7编写)下载:
游客,如果您要查看本帖隐藏内容请回复





点评

支持一下8  发表于 2021-7-25 16:21
找了很久,终于有了!!!  发表于 2021-7-25 16:17
小栗子社区文字广告位 联系===》QQ1917703871
回复 关闭延时

使用道具 举报

C奶奶 发表于 2021-7-25 16:16:31 | 显示全部楼层
不错,又占了一个沙发!
小栗子社区文字广告位 联系===》QQ1917703871
回复 支持 反对

使用道具 举报

Felawikodu 发表于 2021-7-25 16:17:24 | 显示全部楼层
找这个窗口子类化很久了,很难不支持楼主的教程!
小栗子社区文字广告位 联系===》QQ1917703871
回复 支持 反对

使用道具 举报

小叮当 发表于 2021-7-25 18:04:14 | 显示全部楼层
下载看看
小栗子社区文字广告位 联系===》QQ1917703871
回复

使用道具 举报

忆白. 发表于 2021-7-25 18:22:15 | 显示全部楼层
支持两下8
小栗子社区文字广告位 联系===》QQ1917703871
回复

使用道具 举报

小陈同学 发表于 2021-7-25 18:27:11 | 显示全部楼层
exuiyyds
回复

使用道具 举报

飞鸿ks 发表于 2021-7-26 01:44:15 | 显示全部楼层
66666666666666666666
小栗子社区文字广告位 联系===》QQ1917703871
回复 支持 反对

使用道具 举报

fawei-乏味 发表于 2021-7-29 19:46:07 | 显示全部楼层
6666666666666
小栗子社区文字广告位 联系===》QQ1917703871
回复 支持 反对

使用道具 举报

白井黑子 发表于 2021-7-29 23:52:03 | 显示全部楼层

笑死,根本不会用.....
小栗子社区文字广告位 联系===》QQ1917703871
回复 支持 反对

使用道具 举报

2473267776 发表于 2021-8-8 14:59:14 | 显示全部楼层
学习学习
小栗子社区文字广告位 联系===》QQ1917703871
回复

使用道具 举报

12下一页
您需要登录后才可以回帖   登录 立即注册

高级模式

HJH201314

4

主题

52

帖子

92

积分

新手上路

Rank: 1

积分
92
QQ

|Archiver|手机版|小栗子机器人社区 ( 琼ICP备2020005018号-14 )|网站地图

Powered by Discuz! X3.4 © 2001-2018 Comsenz Inc.