为编程爱好者分享易语言教程源码的资源网
好用的代理IP,游戏必备 ____广告位招租____ 服务器99/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器
好用的代理IP,游戏必备 ____广告位招租____ 服务器低至38/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器

网站首页 > 易语言相关 > 易语言例程 正文

易语言限制窗口位置和尺寸

三叶资源网 2019-06-02 09:05:54 易语言例程 2996 ℃ 4 评论
.版本 2

.程序集 窗口程序集_窗口1

.子程序 _窗口1_创建完毕
.局部变量 hWnd, 整数型

hWnd = 取窗口句柄 ()
SetPropA (hWnd, “proc”, SetWindowLongW (hWnd, #GWL_WNDPROC, 到整数 (&WndProc)))  ' 必须要子类化,不然实现不了

.子程序 WndProc, 整数型, , 窗口消息过程
.参数 hWnd, 整数型
.参数 uMsg, 整数型
.参数 wParam, 整数型
.参数 lParam, 整数型
.局部变量 minLeft, 整数型, , , 最小左边
.局部变量 maxLeft, 整数型, , , 最大左边
.局部变量 minTop, 整数型, , , 最小顶边
.局部变量 maxTop, 整数型, , , 最大顶边
.局部变量 minWidth, 整数型, , , 最小宽度
.局部变量 maxWidth, 整数型, , , 最大宽度
.局部变量 minHeight, 整数型, , , 最小高度
.局部变量 maxHeight, 整数型, , , 最大高度
.局部变量 nTmp, 整数型, , , 临时变量,记录读取出来的值

.判断开始 (uMsg = #WM_WINDOWPOSCHANGING)
    .如果真 (选择框1.选中)
        ' lParam 是 WINDOWPOS 结构,结构成员如下
        ' 0 hWnd 窗口句柄
        ' 4 hWndInsertAfter 层次 HWND_ 开头常量
        ' 8 x 左边
        ' 12 y 顶边
        ' 16 cx 宽度
        ' 20 cy 高度
        ' 24 wFlags 标志SWP_开头常量
        minLeft = 到整数 (编辑框_左边最小.内容)
        maxLeft = 到整数 (编辑框_左边最大.内容)
        minTop = 到整数 (编辑框_顶边最小.内容)
        maxTop = 到整数 (编辑框_顶边最大.内容)
        minWidth = 到整数 (编辑框_宽度最小.内容)
        maxWidth = 到整数 (编辑框_宽度最大.内容)
        minHeight = 到整数 (编辑框_高度最小.内容)
        maxHeight = 到整数 (编辑框_高度最大.内容)
        ' __set() __get()  这两个太TM好用了,配合 RtlMoveMemory()使用简直就是万能了
        nTmp = __get (lParam, 8)  ' 取结构里的第三个成员 0=第一个 4=第二个 8=第三个,因为都是整数,都占用4个字节,后面的一样,就不多说了
        .判断开始 (minLeft ≠ -1 且 nTmp < minLeft)  ' -1就当作是不限制
            __set (lParam, 8, minLeft)  ' 超过了我们设置的限制值,那就把限制的值写入到结构里
        .判断 (maxLeft ≠ -1 且 nTmp > maxLeft)
            __set (lParam, 8, maxLeft)
        .默认

        .判断结束
        ' 能看懂一个就能看懂全部,后面的都一样,都是 Ctrl + C - Ctrl + V 然后修改一变量名和写入位置而已

        nTmp = __get (lParam, 12)
        .判断开始 (minTop ≠ -1 且 nTmp < minTop)
            __set (lParam, 12, minTop)
        .判断 (maxTop ≠ -1 且 nTmp > maxTop)
            __set (lParam, 12, maxTop)
        .默认

        .判断结束
        nTmp = __get (lParam, 16)
        .判断开始 (minWidth ≠ -1 且 nTmp < minWidth)
            __set (lParam, 16, minWidth)
        .判断 (maxWidth ≠ -1 且 nTmp > maxWidth)
            __set (lParam, 16, maxWidth)
        .默认

        .判断结束
        nTmp = __get (lParam, 20)
        .判断开始 (minHeight ≠ -1 且 nTmp < minHeight)
            __set (lParam, 20, minHeight)
        .判断 (maxHeight ≠ -1 且 nTmp > maxHeight)
            __set (lParam, 20, maxHeight)
        .默认

        .判断结束


    .如果真结束
    返回 (0)
.判断 (uMsg = #WM_WINDOWPOSCHANGED)
    ' lParam 是 WINDOWPOS 结构,结构成员如下
    ' 0 hWnd 窗口句柄
    ' 4 hWndInsertAfter 层次 HWND_ 开头常量
    ' 8 x 左边
    ' 12 y 顶边
    ' 16 cx 宽度
    ' 20 cy 高度
    ' 24 wFlags 标志SWP_开头常量
    输出调试文本 (“左边:” + 到文本 (__get (lParam, 8)) + “ | 顶边:” + 到文本 (__get (lParam, 12)) + “ | 宽度:” + 到文本 (__get (lParam, 16)) + “ | 高度:” + 到文本 (__get (lParam, 20)) + “ | 读 lParam 这个内存地址的值”)
    输出调试文本 (“左边:” + 到文本 (窗口1.左边) + “ | 顶边:” + 到文本 (窗口1.顶边) + “ | 宽度:” + 到文本 (窗口1.宽度) + “ | 高度:” + 到文本 (窗口1.高度) + “ | 读窗口左顶宽高的值”)
    ' 两个输出都是一样的
    返回 (0)
.默认

.判断结束


返回 (CallWindowProcW (GetPropA (hWnd, “proc”), hWnd, uMsg, wParam, lParam))


.子程序 __set, 整数型, , 请确保指针的合法性,写到内存
.参数 lpAddr, 整数型, , 内存地址
.参数 offset, 整数型, , 偏移
.参数 value, 整数型, , 写入值

置入代码 ({ 139, 93, 8, 139, 77, 12, 139, 4, 25, 139, 85, 16, 137, 20, 25, 201, 194, 12, 0 })
' mov ebx,[ebp+8]
' mov ecx,[ebp+12]
' mov eax,[ebx+ecx]
' mov edx,[ebp+16]
' mov [ebx+ecx],edx
' leave
' ret 12
返回 (0)

.子程序 __get, 整数型, , 请确保指针的合法性,读取内存
.参数 lpAddr, 整数型, , 内存地址
.参数 offset, 整数型, , 偏移

置入代码 ({ 139, 69, 8, 139, 93, 12, 139, 4, 24, 201, 194, 8, 0 })
' mov eax,[ebp+8]
' mov ebx,[ebp+12]
' mov eax,[eax+ebx]
' leave
' ret 8
返回 (0)

@121007124

文件下载

来源:三叶资源网,欢迎分享,公众号:iisanye,(三叶资源网⑤群:21414575

已有4位网友发表了看法:

  • 易语言

    易语言  评论于 [2020-04-25 12:48:21]  回复

    易语言窗口位置取显示器大小

欢迎 发表评论:

百度站内搜索
关注微信公众号
三叶资源网⑤群:三叶资源网⑤群

网站分类
随机tag
聊呗协议卡密生成系统无水印解析HTTP服务端多线程例子易CEF3浏览器支持库goproxypython基础教程dom变量数据交换HTTP服务器ASP网络验证QQ音乐加速器靠边隐藏扫码枪窗口位置控制模块音遇折线图4399登录VMware
最新评论