这篇文章主要介绍了易语言如何隐藏窗口,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
本经验可以帮你的软件添加像气QQ一样的伸缩窗口
新建一个Windows窗口程序
双击启动窗口,输入代码:
.版本 2 .支持库 spec .程序集 窗口程序集1 .程序集变量 原窗口, 整数型 .程序集变量 停靠, 整数型, , , 1左,2上,3右,0为不 .程序集变量 正在收放, 整数型, , , 1收,2放 .程序集变量 计数, 整数型 .程序集变量 已收起, 逻辑型 .程序集变量 时钟, 整数型 .程序集变量 步进长度, 整数型, , , 新加的 .程序集变量 最小尺寸, 整数型, , , 新加的 .子程序 __启动窗口_创建完毕 ' 本程序严格按照比赛要求,只限制左,上,右窗口移动和停靠,且只和鼠标在窗口停留或离开后1秒后才有动作-borisc 原窗口 = 设置窗口信息_ (取窗口句柄 (), #GWL_WNDPROC, 到整数 (&处理)) 读回窗口位置 () 步进长度 = 15 最小尺寸 = 5 .子程序 读回窗口位置, , , 移植_ .局部变量 配置文件名, 文本型 配置文件名 = 取运行目录 () + “\窗口位置.INI” _启动窗口.高度 = 到数值 (读配置项 (配置文件名, “WINDOW”, “高度”, 到文本 (取屏幕高度 () ÷ 2))) _启动窗口.宽度 = 到数值 (读配置项 (配置文件名, “WINDOW”, “宽度”, 到文本 (取屏幕宽度 () ÷ 4))) _启动窗口.左边 = 到数值 (读配置项 (配置文件名, “WINDOW”, “左边”, 到文本 (取屏幕宽度 () ÷ 2))) _启动窗口.顶边 = 到数值 (读配置项 (配置文件名, “WINDOW”, “顶边”, “0”)) .如果真 (_启动窗口.左边 > 取屏幕宽度 () - 30) _启动窗口.左边 = (取屏幕宽度 () - _启动窗口.宽度) ÷ 2 .如果真结束 .如果真 (_启动窗口.左边 < 0) _启动窗口.左边 = 0 .如果真结束 .如果真 (_启动窗口.顶边 > 取屏幕高度 () - _启动窗口.高度) _启动窗口.顶边 = 取屏幕高度 () - _启动窗口.高度 .如果真结束 .如果真 (_启动窗口.顶边 < 0) _启动窗口.顶边 = 0 .如果真结束 调试输出 (“_启动窗口.”, _启动窗口.左边, _启动窗口.顶边, _启动窗口.高度, _启动窗口.宽度) .子程序 将被销毁保存位置, , , 移植_ .局部变量 配置文件名, 文本型 配置文件名 = 取运行目录 () + “\窗口位置.INI” 写配置项 (配置文件名, “WINDOW”, “左边”, 到文本 (_启动窗口.左边)) 写配置项 (配置文件名, “WINDOW”, “顶边”, 到文本 (_启动窗口.顶边)) 写配置项 (配置文件名, “WINDOW”, “高度”, 到文本 (_启动窗口.高度)) 写配置项 (配置文件名, “WINDOW”, “宽度”, 到文本 (_启动窗口.宽度)) .子程序 处理, 整数型 .参数 hwnd, 整数型 .参数 Msg, 整数型 .参数 wp, 整数型 .参数 lp, 整数型 .判断开始 (Msg = #WM_MOVING) ' 正在移动 限制移动或大小 (lp, 0) .如果真 (停靠 ≠ 0) ' 移动禁止依靠 停靠 = 0 正在收放 = 0 .如果真结束 .判断 (Msg = #WM_GETMINMAXINFO) ' 正在获得大小消息 .如果真 (正在收放 = 0) 限制移动或大小 (lp, 1) .如果真结束 .判断 (Msg = #WM_SIZING) ' 正在改变大小 .如果真 (停靠 ≠ 0) ' 大小禁止依靠 停靠 = 0 正在收放 = 0 .如果真结束 .判断 (Msg = #WM_SIZE) ' 大小已改变 判断停靠 () .判断 (Msg = #WM_MOVE) ' 位置已移动 .如果真 (正在收放 = 0) ' 无收放动作 判断停靠 () .如果真结束 .判断 (Msg = #WM_EXITSIZEMOVE) 判断停靠 () .判断 (Msg = #WM_NCLBUTTONDOWN) ' 标题栏鼠标按下 .如果真 (停靠 ≠ 0) .如果真 ((已收起 或 正在收放 ≠ 0) 且 wp ≠ 2) ' 禁止大小 Msg = 0 .如果真结束 .如果真结束 .判断 (Msg = #WM_SYSCOMMAND) ' 系统菜单 .如果真 ((已收起 或 正在收放 ≠ 0) 且 wp = 61440) ' 收起了禁止调整大小 Msg = 0 .如果真结束 .默认 .判断结束 返回 (呼叫窗口函数地址_ (原窗口, hwnd, Msg, wp, lp)) .子程序 判断停靠 .判断开始 (顶边 < 2) _启动窗口.移动 (, 0, , ) ' 这里可写吸附 停靠 = 2 ' 上 .如果真 (时钟 = 0) 时钟 = 设置时钟_ (取窗口句柄 (), 1036, 100, 到整数 (&判断收放)) .如果真结束 .判断 (左边 < 2) 停靠 = 1 ' 左 _启动窗口.移动 (0, , , ) .如果真 (时钟 = 0) 时钟 = 设置时钟_ (取窗口句柄 (), 1036, 100, 到整数 (&判断收放)) .如果真结束 .判断 (左边 > 取屏幕宽度 () - 宽度 - 2) 停靠 = 3 ' 右 _启动窗口.移动 (取屏幕宽度 () - 宽度, , , ) .如果真 (时钟 = 0) 时钟 = 设置时钟_ (取窗口句柄 (), 1036, 100, 到整数 (&判断收放)) .如果真结束 .默认 停靠 = 0 .如果真 (时钟 ≠ 0) 销毁时钟_ (取窗口句柄 (), 1036) 时钟 = 0 .如果真结束 .判断结束 .如果真 (已收起) 判断收起 () .如果真结束 .子程序 判断收起 .判断开始 (顶边 = 5 - 高度 或 左边 = 5 - 宽度 或 左边 = 取屏幕宽度 () - 5) 已收起 = 真 .默认 已收起 = 假 .判断结束 .子程序 限制移动或大小, , , 0移动,非0大小 .参数 lp, 整数型, 参考 .参数 移动或大小, 整数型 .局部变量 a, MINMAXINFO ' 分开子程序是不想鼠标移动等等其它信息也分一个变量空间,个人猜想 .判断开始 (移动或大小 = 0) 复制内存1_ (a, lp, 40) ' 40为MINMAXINFO结构长度 .如果真 (a.ptReserved.横向位置 < 2) ' 靠边像磁铁一样,为0就不吸啦 a.ptReserved.横向位置 = 0 a.ptMaxSize.横向位置 = 0 + 宽度 .如果真结束 .如果真 (a.ptReserved.纵向位置 < 2) a.ptReserved.纵向位置 = 0 a.ptMaxSize.纵向位置 = 0 + 高度 .如果真结束 .如果真 (a.ptMaxSize.横向位置 > 取屏幕宽度 () - 2) a.ptReserved.横向位置 = 取屏幕宽度 () - 宽度 a.ptMaxSize.横向位置 = 取屏幕宽度 () .如果真结束 .如果真 (a.ptMaxSize.纵向位置 > 取屏幕高度 ()) ' 这里是限制窗口下边不越出屏幕之外的代码. a.ptReserved.纵向位置 = 取屏幕高度 () - 高度 a.ptMaxSize.纵向位置 = 取屏幕高度 () .如果真结束 复制内存_ (lp, a, 40) ' 40为MINMAXINFO结构长度 .默认 复制内存1_ (a, lp, 40) ' 40为MINMAXINFO结构长度 a.ptMinTrackSize.横向位置 = 188 ' 最小X a.ptMinTrackSize.纵向位置 = 250 ' 最小Y ' ' a.ptMaxTrackSize.横向位置 = 取屏幕宽度 () ' 最大X ' ' a.ptMaxTrackSize.纵向位置 = 取屏幕高度 () ' 最大Y 复制内存_ (lp, a, 40) ' 40为MINMAXINFO结构长度 .判断结束 ' ZeroMemory (a, 40) .子程序 判断收放 .局部变量 x, 整数型 .局部变量 y, 整数型 x = 取鼠标水平位置 () y = 取鼠标垂直位置 () .判断开始 (x < 左边 或 x > 左边 + 宽度 或 y < 顶边 或 y > 顶边 + 高度) .如果真 (正在收放 = 2) ' 正在展开时收起 正在收放 = 0 延时 (10) .如果真 (停靠 ≠ 0) 窗口收起 () .如果真结束 .如果真结束 .判断开始 (已收起) 计数 = 0 .默认 .判断开始 (停靠 = 0) 计数 = 0 .默认 计数 = 计数 + 1 .判断结束 .如果真 (计数 = 10) ' 1秒收起 计数 = 0 .如果真 (正在收放 ≠ 1) 窗口收起 () .如果真结束 .如果真结束 .判断结束 .默认 .判断开始 (已收起) 计数 = 计数 + 1 .如果真 (计数 = 10) ' 1秒展开 计数 = 0 .如果真 (正在收放 ≠ 2 且 停靠 ≠ 0) 窗口展开 () .如果真结束 .如果真结束 .默认 计数 = 0 .判断结束 .如果真 (正在收放 = 1) ' 正在收起时展开 正在收放 = 0 延时 (10) .如果真 (正在收放 ≠ 2 且 停靠 ≠ 0) 窗口展开 () .如果真结束 .如果真结束 .判断结束 .子程序 窗口收起 .局部变量 x, 整数型 .局部变量 y, 整数型 正在收放 = 1 .判断开始 (停靠 = 1) ' 左 x = _启动窗口.左边 .判断循环首 (x > 7 - _启动窗口.宽度) 处理事件 () .如果真 (正在收放 ≠ 1 或 停靠 = 0) 返回 () .如果真结束 延时 (10) x = x - 步进长度 ' 5 _启动窗口.移动 (x, , , ) .判断循环尾 () _启动窗口.移动 (最小尺寸 - _启动窗口.宽度, , , ) ' 5 .判断 (停靠 = 3) ' 右 x = 左边 y = 取屏幕宽度 () .判断循环首 (x < y - 7) 处理事件 () .如果真 (正在收放 ≠ 1 或 停靠 = 0) 返回 () .如果真结束 延时 (10) x = x + 步进长度 ' 5 _启动窗口.移动 (x, , , ) .判断循环尾 () _启动窗口.移动 (y - 最小尺寸, , , ) .判断 (停靠 = 2) ' 上 x = 顶边 .判断循环首 (x > 7 - 高度) 处理事件 () .如果真 (正在收放 ≠ 1 或 停靠 = 0) 返回 () .如果真结束 延时 (10) x = x - 步进长度 ' 5 _启动窗口.移动 (, x, , ) .判断循环尾 () _启动窗口.移动 (, 最小尺寸 - _启动窗口.高度, , ) .默认 .判断结束 ' 销毁时钟_ (取窗口句柄 (), 1036) ' 时钟=0 已收起 = 真 正在收放 = 0 总在最前 = 真 调整层次 (#顶层) 调整层次 (#最高层) .子程序 窗口展开 .局部变量 x, 整数型 .局部变量 y, 整数型 正在收放 = 2 已收起 = 假 _启动窗口.总在最前 = 真 _启动窗口.总在最前 = 假 .判断开始 (停靠 = 2) ' 上 x = _启动窗口.顶边 .判断循环首 (x < -7) 处理事件 () .如果真 (正在收放 ≠ 2 或 停靠 = 0) 返回 () .如果真结束 延时 (10) x = x + 步进长度 ' 5 _启动窗口.移动 (, x, , ) .判断循环尾 () _启动窗口.移动 (, 0, , ) .判断 (停靠 = 1) ' 左 x = 左边 .判断循环首 (x < -7) 处理事件 () .如果真 (正在收放 ≠ 2 或 停靠 = 0) 返回 () .如果真结束 延时 (10) x = x + 步进长度 ' 5 _启动窗口.移动 (x, , , ) .判断循环尾 () _启动窗口.移动 (0, , , ) .判断 (停靠 = 3) ' 右 x = 左边 y = 取屏幕宽度 () .判断循环首 (x > y - _启动窗口.宽度 + 7) 处理事件 () .如果真 (正在收放 ≠ 2 或 停靠 = 0) 返回 () .如果真结束 延时 (10) x = x - 步进长度 ' 5 _启动窗口.移动 (x, , , ) .判断循环尾 () _启动窗口.移动 (y - _启动窗口.宽度, , , ) .默认 .判断结束 正在收放 = 0 _启动窗口.激活 () 总在最前 = 真 调整层次 (#顶层) 调整层次 (#最高层) .子程序 __启动窗口_将被销毁 设置窗口信息_ (取窗口句柄 (), #GWL_WNDPROC, 原窗口) .如果真 (时钟 ≠ 0) 销毁时钟_ (取窗口句柄 (), 1036) .如果真结束 .如果真 (正在收放 ≠ 0) 正在收放 = 0 .如果真结束 将被销毁保存位置 ()
复制DLL:
.版本 2 .DLL命令 设置窗口信息_, 整数型, "user32", "SetWindowLongA", , 在窗口结构中为指定的窗口设置信息 指定数据的前一个值 .参数 窗口句柄, 整数型, , hwnd,欲为其取得信息的窗口的句柄 .参数 窗口信息值, 整数型, , nIndex,请参考GetWindowLong函数的nIndex参数的说明 .参数 窗口信息新值, 整数型, , dwNewLong,由nIndex指定的窗口信息的新值 .DLL命令 呼叫窗口函数地址_, 整数型, "user32.dll", "CallWindowProcA", , CallWindowProcA将消息传答窗口函数 .参数 前一窗口函数地址, 整数型, , lpPrevWndFunc .参数 窗口句柄, 整数型, , hwnd .参数 消息值, 整数型, , msg .参数 附加参数1, 整数型, , wParam .参数 附加参数2, 整数型, , lParam .DLL命令 复制内存_, , "kernel32.dll", "RtlMoveMemory", , CopyMemory .参数 pDest, 整数型 .参数 pSrc, MINMAXINFO .参数 ByteLen, 字节型 .DLL命令 复制内存1_, , "kernel32.dll", "RtlMoveMemory", , CopyMemory1 .参数 pDest, MINMAXINFO .参数 pSrc, 整数型 .参数 ByteLen, 字节型 .DLL命令 设置时钟_, 整数型, "user32.dll", "SetTimer", , SetTimer .参数 窗口句柄, 整数型, , hwnd .参数 事件标识符, 整数型, , nIDEvent .参数 时钟周期, 整数型, , uElapse .参数 回调函数地址, 整数型, , lpTimerFunc .DLL命令 销毁时钟_, 整数型, "user32.dll", "KillTimer", , KillTimer .参数 窗口句柄, 整数型, , hwnd .参数 事件标识符, 整数型, , nIDEvent .DLL命令 内存清零_, , "kernel32.dll", "RtlZeroMemory", , ZeroMemory将一块内存置零 .参数 目的内存, MINMAXINFO, 传址, Destination .参数 长度, 整数型, , Length
复制自定义数据:
.版本 2 .数据类型 坐标, , 坐标;POINTAPI .成员 横向位置, 整数型, , , X坐标 .成员 纵向位置, 整数型, , , Y坐标 .数据类型 MINMAXINFO, , MINMAXINFO .成员 ptReserved, 坐标 .成员 ptMaxSize, 坐标 .成员 ptMaxPosition, 坐标 .成员 ptMinTrackSize, 坐标 .成员 ptMaxTrackSize, 坐标
复制常量数据:
.版本 2 .常量 GWL_WNDPROC, "-4" .常量 WM_GETMINMAXINFO, "36", , 此消息发送给窗口当它将要改变大小或位置; .常量 WM_MOUSEMOVE, "512" .常量 WM_NCMOUSEMOVE, "160" .常量 WM_EXITSIZEMOVE, "562" .常量 WM_MOVING, "534" .常量 WM_MOVE, "3" .常量 WM_NCHITTEST, "132" .常量 WM_NCLBUTTONDOWN, "161" .常量 WM_NCLBUTTONUP, "162" .常量 WM_SIZE, "5" .常量 WM_SIZING, "532" .常量 WM_SYSCOMMAND, "274" .常量 WM_KEYUP, "257" .常量 WM_KEYDOWN, "256"
狂击F5调试程序。
感谢你能够认真阅读完这篇文章,希望小编分享的“易语言如何隐藏窗口”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。