本經驗可以幫你的軟件添加像氣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調試程序。
以上就是關于易語言隱藏窗口的全部內容,感謝大家對VeVb武林網的支持。
新聞熱點
疑難解答