找回密码
 加入
搜索
查看: 38547|回复: 28

[交流] 控制窗口大小例子

 火... [复制链接]
发表于 2012-1-17 14:38:19 | 显示全部楼层 |阅读模式
;功能:控制窗口最小尺寸100 x 100,最大尺寸400 x 400
Global Const $WM_GETMINMAXINFO = 0x0024
$Gui = GUICreate("控制窗口大小", 300, 300, -1, -1, 0x00040000) ;$WS_SIZEBOX
GUISetState()
GUIRegisterMsg($WM_GETMINMAXINFO, "WM_GETMINMAXINFO")

Do
Until GUIGetMsg() = -3

Func WM_GETMINMAXINFO($hwnd, $Msg, $wparam, $lparam)
        Local $tagMINMAXINFO = "int;int;int;int;int;int;int;int;int;int"
        $MINMAXINFO = DllStructCreate($tagMINMAXINFO, $lparam)
        DllStructSetData($MINMAXINFO,7,100) ;minx
        DllStructSetData($MINMAXINFO,8,100) ;miny
        DllStructSetData($MINMAXINFO,9,400) ;maxx
        DllStructSetData($MINMAXINFO,10,400) ;maxy
EndFunc   ;==>WM_GETMINMAXINFO

评分

参与人数 3金钱 +50 贡献 +14 收起 理由
yohoboy + 10 很给力!
komaau3 + 10 + 9 精品消息,精品代码
lixiaolong + 30 + 5

查看全部评分

发表于 2012-1-17 15:00:43 | 显示全部楼层
回复 3# 风行者


    恩,谢谢
发表于 2012-1-17 14:41:24 | 显示全部楼层
回复 1# 风行者


    哈喽,帅哥,你停靠边栏触发研究的咋样了?
   能否分享点经验
 楼主| 发表于 2012-1-17 14:45:37 | 显示全部楼层
回复 2# Ycxw2008

你说这个么?窗口收缩
$hForm = GUICreate('My GUI',250,600)
GUISetState()

While GUIGetMsg() <> -3
        _WinHide($hForm)
        Sleep(10)
WEnd

Func _WinHide($Hwnd)
        $Wp = WinGetPos($hForm)
        $Mp = MouseGetPos()
        Select
                Case $Wp[1] <=3
                        If ($Mp[0]<$Wp[0] Or $Mp[0] > $Wp[0]+$Wp[2] or $Mp[1] > $Wp[1]+$Wp[3]) Then
                                WinMove($Hwnd,"",$Wp[0],3-$Wp[3],$Wp[2],$Wp[3],1)
                        Else
                                WinMove($Hwnd,"",$Wp[0],3,$Wp[2],$Wp[3],1)
                        EndIf
                Case $Wp[0] >= (@DesktopWidth - $Wp[2]+3)
                        If ($Mp[0]<$Wp[0] Or $Mp[1] < $Wp[1] Or $Mp[1] > $Wp[1]+$Wp[3]) Then
                                WinMove($Hwnd,"",@DesktopWidth - 3,$Wp[1],$Wp[2],$Wp[3],1)
                        Else
                                WinMove($Hwnd,"",@DesktopWidth - $Wp[2]+3,$Wp[1],$Wp[2],$Wp[3],1)
                        EndIf
        EndSelect
EndFunc
发表于 2012-1-17 17:39:13 | 显示全部楼层
谢谢分享经验!
发表于 2012-1-17 20:04:43 | 显示全部楼层
收藏备用,哈
发表于 2012-1-17 20:13:01 | 显示全部楼层
嗯嗯,不错,两天就搞定,呵呵
发表于 2012-1-17 20:13:23 | 显示全部楼层
谢谢提供,不错
不过查了一下结构,注释有点问题
typedef struct tagMINMAXINFO {
  POINT ptReserved;
  POINT ptMaxSize;
  POINT ptMaxPosition;
  POINT ptMinTrackSize;
  POINT ptMaxTrackSize;
} MINMAXINFO, *PMINMAXINFO, *LPMINMAXINFO;
7,8,9,10不是minx,miny,maxx,maxy
应该是
MinTrackSize,MaxTrackSize
即鼠标拖动的最小最大尺寸
发表于 2012-1-17 22:34:39 | 显示全部楼层
不错,收下了
发表于 2012-1-29 21:20:44 | 显示全部楼层
回复 3# 风行者


    不错。
   不过同时靠右和靠上的情况(即右上角)还可以再处理下。
发表于 2012-2-20 08:14:59 | 显示全部楼层
回复 3# 风行者


强大,我测试左边和下边不行呢?请指教。谢谢!
发表于 2012-2-24 08:17:09 | 显示全部楼层
学习学习......
发表于 2012-3-2 12:06:01 | 显示全部楼层
谢谢分享!学习了...
发表于 2012-7-22 23:09:51 | 显示全部楼层
谢谢分享
发表于 2012-7-31 17:39:22 | 显示全部楼层
这个不错,谢谢提供,
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-25 00:43 , Processed in 0.076810 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表