[已解决]无标题窗口_菜单隐藏问题_移动问题_2
本帖最后由 zerobin 于 2012-6-4 12:04 编辑一个GUI <<GUICreate>> <<$WS_POPUP>>
GUI窗口上面小部分(a)是个菜单<<GUICtrlCreateMenu>>
GUI窗口下面大部分(b)显示的是网页
点击菜单中不同菜单项,GUI窗口下面大部分(b)中显示相对应的网页
问题:
1、鼠标点按GUI任何位置实现移动窗口
2、菜单可以在GUI中自动隐藏吗?当鼠标置于GUI窗口上半部(或顶部20PX以内)菜单自动显示(或弹出),鼠标移出后,菜单自动隐藏(或消失)
PS:
对于问题1,这是我第二次碰到无标题窗口移动问题,上次是按钮和LAB的移动,这次是有个菜单在里面,搜索一圈下来,不知道如何解决,请前辈指导
对于问题2,我有搜索到GUI窗口在桌面上下左右四边自动隐藏的帖子,看了一下,我实现不了菜单在gui内部自动隐藏。请前辈指导
摸索到的方法:
有瑕疵:
当窗口不在激活状态,鼠标移动到可见窗口区域内(此时的窗口没有被其他窗口挡住),隐藏的菜单不会出来。需要点击网页无超链处或任务栏图标,激活窗口,菜单才显示出来。
要是去掉If WinActive($Form1) Then 这个判断,当窗口全部被遮住后,鼠标进入窗口所在的坐标区域也会显示出form2菜单来。
如何解决这个问题,实现窗口未激活,在窗口部分可见(因为有其他窗口遮盖)和在窗口全部可见情况下,鼠标放在可见区域内就会GUISetState(@SW_SHOW, $Form2)呢。搜论坛,ControlGetFocus,_WinAPI_GetFocus,ControlGetHandle。我没有弄出来。#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <Misc.au3>
#include <WinAPI.au3>
Opt("GUICoordMode", 2)
Opt("GUIOnEventMode", 1)
Global $menu, $menu2, $menu3, $A1, $A2, $B1, $C1, $C2, $menushow = 0, $i = 1
Global $url, $Gui_h, $Gui_w, $Form1, $1, $2, $Form2, $Form3, $Label1
Global $PosDiff, $MousePos, $WinPos
$url = "http://WWW.HAO123.COM"
Global $Title = "HAO123"
$Gui_w = 482
$Gui_h = 290
$Form1 = GUICreate($Title, $Gui_w, $Gui_h, -1, -1, $WS_POPUP + $WS_EX_LAYERED)
$WinPos = WinGetPos($Form1, "")
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_mousedown")
$1 = ObjCreate("Shell.Explorer.2")
$2 = GUICtrlCreateObj($1, -30, -30, $Gui_w + 50, $Gui_h)
GUICtrlSetState(-1, $GUI_HIDE)
$1.navigate($url)
_caidan()
GUISetState(@SW_HIDE, $Form2)
GUISetState(@SW_SHOW, $Form1)
GUICtrlSetState($2, $GUI_show)
While 1
_checkmenushow()
Sleep(150)
WEnd
Func _checkmenushow()
$MousePos = MouseGetPos()
$WinPos = WinGetPos($Form1)
;~ MsgBox(4096, "Get ClassName", "ClassName of " & $Form1 & ": " & _WinAPI_GetClassName($Form1),1)
;~ MsgBox(4096, "Get ClassName", "ClassName of " & $Form2 & ": " & _WinAPI_GetClassName($Form2),1)
If $MousePos > $WinPos And $MousePos < $WinPos + $WinPos And $MousePos > $WinPos And $MousePos < $WinPos + $WinPos Then
If WinActive($Form1) Then ;这样要form在激活状态下才能显示菜单,如何实现不用激活窗口,只要有可见的form1区域,鼠标移到该区域内即显示菜单呢?
GUISetState(@SW_SHOW, $Form2)
EndIf
Else
GUISetState(@SW_HIDE, $Form2)
EndIf
EndFunc ;==>_checkmenushow
Func _mousedown()
$M1 = GUIGetCursorInfo($Form1)
$M2 = GUIGetCursorInfo($Form2)
If $M1 = 0 Or $M2 = 0 Then ;点击网页中无超链接的地方和菜单空白处实现了移动窗口
$MousePos = MouseGetPos()
$WinPos = WinGetPos($Form1, "")
$PosDiff = $WinPos - $MousePos
$PosDiff = $WinPos - $MousePos
While _IsPressed("01", DllOpen("user32.dll"))
$MousePos = MouseGetPos()
WinMove($Form1, "", $MousePos + $PosDiff, $MousePos + $PosDiff)
;~ WinMove($Form2, "", $MousePos + $PosDiff, $MousePos + $PosDiff)
WEnd
EndIf
EndFunc ;==>_mousedown
Func _caidan()
$Form2 = GUICreate("", 200, 20, -1, -1, $WS_POPUP, $WS_EX_MDICHILD, $Form1)
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_mousedown")
$menu = GUICtrlCreateMenu("菜单A")
$A1 = GUICtrlCreateMenuItem("HAO123", $menu)
GUICtrlSetOnEvent(-1, "_DT")
$A2 = GUICtrlCreateMenuItem("BAIDU", $menu)
GUICtrlSetOnEvent(-1, "_DT")
$menu2 = GUICtrlCreateMenu("菜单B")
$B1 = GUICtrlCreateMenuItem("SOHU", $menu2)
GUICtrlSetOnEvent(-1, "_DT")
$menu3 = GUICtrlCreateMenu("窗口")
$C1 = GUICtrlCreateMenuItem("最小化", $menu3)
GUICtrlSetOnEvent(-1, "_DT")
$C2 = GUICtrlCreateMenuItem("退出", $menu3)
GUICtrlSetOnEvent(-1, "_DT")
EndFunc ;==>_caidan
Func _DT()
Switch @GUI_CtrlId
Case $A1
GUIDelete($Form1)
$url = "http://WWW.HAO123.COM"
Global $Title = "HAO123"
$Gui_w = 482
$Gui_h = 290
$Form1 = GUICreate($Title, $Gui_w, $Gui_h, $WinPos, $WinPos, $WS_POPUP + $WS_EX_LAYERED)
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_mousedown")
$1 = ObjCreate("Shell.Explorer.2")
$2 = GUICtrlCreateObj($1, -30, -30, $Gui_w + 50, $Gui_h)
GUICtrlSetState(-1, $GUI_HIDE)
$1.navigate($url)
_caidan()
GUISetState(@SW_HIDE, $Form2)
GUISetState(@SW_SHOW, $Form1)
GUICtrlSetState($2, $GUI_show)
Case $A2
GUIDelete($Form1)
$url = "http://WWW.baidu.COM"
Global $Title = "baidu"
$Gui_w = 482
$Gui_h = 290
$Form1 = GUICreate($Title, $Gui_w, $Gui_h, $WinPos, $WinPos, $WS_POPUP + $WS_EX_LAYERED)
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_mousedown")
$1 = ObjCreate("Shell.Explorer.2")
$2 = GUICtrlCreateObj($1, -30, -30, $Gui_w + 50, $Gui_h)
GUICtrlSetState(-1, $GUI_HIDE)
$1.navigate($url)
_caidan()
GUISetState(@SW_HIDE, $Form2)
GUISetState(@SW_SHOW, $Form1)
GUICtrlSetState($2, $GUI_show)
Case $B1
GUIDelete($Form1)
$url = "http://WWW.163.COM"
Global $Title = "163"
$Gui_w = 482
$Gui_h = 290
$Form1 = GUICreate($Title, $Gui_w, $Gui_h, $WinPos, $WinPos, $WS_POPUP + $WS_EX_LAYERED)
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_mousedown")
$1 = ObjCreate("Shell.Explorer.2")
$2 = GUICtrlCreateObj($1, -30, -30, $Gui_w + 50, $Gui_h)
GUICtrlSetState(-1, $GUI_HIDE)
$1.navigate($url)
_caidan()
GUISetState(@SW_HIDE, $Form2)
GUISetState(@SW_SHOW, $Form1)
GUICtrlSetState($2, $GUI_show)
Case $C1
WinSetState($Form1, "", @SW_MINIMIZE)
Case $C2
Exit
EndSwitch
EndFunc ;==>_DT
先占个座位,在上班。 满窗口的IE,估计要移动难了点
菜单栏自处理能移动,有难度 本帖最后由 zerobin 于 2012-5-15 16:23 编辑
谢谢,一起问了GUICreate("",500,375,-1,-1,0x80000000,0,WinGetHandle(''))
GUISetState()
While GUIGetMsg() + 3
WEnd
上面是此贴 无标题无任务栏的窗口 的代码,请问04行的 While GUIGetMsg() + 3 何解?
贴的代码如何高亮呀
终于会高亮了 GUIGetMsg() + 3 何解
是指关闭窗口GUIGetMsg() =-3
所以当是关闭窗口时,GUIGetMsg() + 3等于0,即不执行循环 GUIGetMsg() + 3 何解
是指关闭窗口GUIGetMsg() =-3
所以当是关闭窗口时,GUIGetMsg() + 3等于0,即不执 ...
seniors 发表于 2012-5-15 16:00 http://www.autoitx.com/images/common/back.gif
是否是系统消息代码中的 WM_CLOSE 0x0010 本帖最后由 haijie1223 于 2012-5-15 16:12 编辑
回复 4# zerobin
代码高亮用 “[‘au3’]”和“[’/au3‘]”括起来,去掉引号。
msgbox()
本帖最后由 zerobin 于 2012-5-15 16:23 编辑
回复zerobin
代码高亮用 “[‘au3’]”和“[’/au3‘]”括起来,去掉引号。
haijie1223 发表于 2012-5-15 16:06 http://www.autoitx.com/images/common/back.gif
。。。试了好多遍,这样的格式 【au3】你的代码【/au3】。将【】更换为[] 回复 6# zerobin
$GUI_EVENT_CLOSE=-3
没研究过,可能和$WM_CLOSE消息是回事 回复zerobin
$GUI_EVENT_CLOSE=-3
没研究过,可能和$WM_CLOSE消息是回事
seniors 发表于 2012-5-15 16:35 http://www.autoitx.com/images/common/back.gif
$GUI_EVENT_CLOSE = -3
这个是在那个地方查的 找到了 GUIConstantsEx.au3 中。谢谢 回复 10# zerobin
这个你可以通过msgbox来看看返回值是不是-3,当点击X按钮时 公共扩展样式里有个 $GUI_WS_EX_PARENTDRAG 允许拖动标签(label)或者图片(Pic)控件时即拖动整个父窗口。不知道对LZ有没用?LZ的窗口大部分都是网页。
msgbox(0,0,0)
回复 14# 502762378
???{:face (382):}
页:
[1]
2