风行者 发表于 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

Ycxw2008 发表于 2012-1-17 15:00:43

回复 3# 风行者


    恩,谢谢

Ycxw2008 发表于 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 <=3
                        If ($Mp<$Wp Or $Mp > $Wp+$Wp or $Mp > $Wp+$Wp) Then
                                WinMove($Hwnd,"",$Wp,3-$Wp,$Wp,$Wp,1)
                        Else
                                WinMove($Hwnd,"",$Wp,3,$Wp,$Wp,1)
                        EndIf
                Case $Wp >= (@DesktopWidth - $Wp+3)
                        If ($Mp<$Wp Or $Mp < $Wp Or $Mp > $Wp+$Wp) Then
                                WinMove($Hwnd,"",@DesktopWidth - 3,$Wp,$Wp,$Wp,1)
                        Else
                                WinMove($Hwnd,"",@DesktopWidth - $Wp+3,$Wp,$Wp,$Wp,1)
                        EndIf
        EndSelect
EndFunc

qq271859852 发表于 2012-1-17 17:39:13

谢谢分享经验!

jtw 发表于 2012-1-17 20:04:43

收藏备用,哈

Chinacat 发表于 2012-1-17 20:13:01

嗯嗯,不错,两天就搞定,呵呵

seniors 发表于 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
即鼠标拖动的最小最大尺寸

zldfsz 发表于 2012-1-17 22:34:39

不错,收下了

xiehuahere 发表于 2012-1-29 21:20:44

回复 3# 风行者


    不错。
   不过同时靠右和靠上的情况(即右上角)还可以再处理下。

ferelove 发表于 2012-2-20 08:14:59

回复 3# 风行者


强大,我测试左边和下边不行呢?请指教。谢谢!

lxzan 发表于 2012-2-24 08:17:09

学习学习......

sun777222 发表于 2012-3-2 12:06:01

谢谢分享!学习了...

chzj589 发表于 2012-7-22 23:09:51

谢谢分享{:face (361):}

鸟人 发表于 2012-7-31 17:39:22

这个不错,谢谢提供,
页: [1] 2
查看完整版本: 控制窗口大小例子