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

.版本 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)
相关文件下载地址
©下载资源版权归作者所有;本站所有资源均来源于网络,仅供学习使用,请支持正版!

易语言限制窗口位置和尺寸》有0个想法

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注