zhangji2008_201 发表于 2008-5-16 21:23:01

如何嵌入窗口到GUI里

怎么样将一个窗口嵌入到我的GUI里?帮帮忙了!

[ 本帖最后由 zhangji2008_201 于 2008-6-4 22:36 编辑 ]

asdf 发表于 2008-5-16 21:51:27

……这个……使用子窗口?

asdf 发表于 2008-5-16 21:54:30

我想,lz是想实现PS之类软件那样,窗口中还有窗口?

sanhen 发表于 2008-5-18 20:50:32

所谓的嵌入是固定在父窗口还是可以自由移动的?

asdf 发表于 2008-5-18 20:57:11

应该是可以动的吧。

sanhen 发表于 2008-5-18 21:09:01

说错了。是固定在父窗口移动。还是怎么样的呢?理解能力有限。

破帽遮颜 发表于 2008-5-18 21:22:00

有这样的例子~我找找先!

破帽遮颜 发表于 2008-5-18 21:29:26

不知道这是不是你需要的样子?


#include <GuiConstants.au3>
#include <WindowsConstants.au3>

Global $gui
$x = 1

$Mother_GUI = GUICreate("内镶窗口,呵呵",-1,-1,-1,-1,BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))
$Button_1 = GUICtrlCreateButton("新建窗口", 5, 5, 70, 20)
GUICtrlSetResizing(-1,$GUI_DOCKALL)
$Button_2 = GUICtrlCreateButton("删掉窗口",5,30,70,20)
GUICtrlSetResizing(-1,$GUI_DOCKALL)
$Input_1 = GUICtrlCreateInput("1",5,60,70,20)
GUICtrlSetResizing(-1,$GUI_DOCKALL)
GUISetState(@SW_SHOW, $Mother_GUI)

$Main_GUI = GUICreate("",220,300,80,5,$WS_POPUPWINDOW)
GUISetBkColor(0xCCCCCC)
GUISetState(@SW_SHOW,$Main_GUI)
DllCall("user32.dll", "int", "SetParent", "hwnd", WinGetHandle($Main_GUI), "hwnd", WinGetHandle($Mother_GUI))
Makebox()
While 1
    setsize()
    $msg = GUIGetMsg()
    if $msg = $GUI_EVENT_CLOSE then Exit
    if $msg = $Button_1 then Makebox()
    if $msg = $Button_2 then GUIDelete($Gui)
    sleep(10)
WEnd

Func Makebox()
    if $x < 100000 then
      $gui[$x] = GUICreate("",200,90,100+$x*5,100+$x*5, $WS_POPUPWINDOW,$WS_EX_TOOLWINDOW)
      $label = GUICtrlCreateLabel("新建的窗口" & $x,0,0,200,20,-1,$GUI_WS_EX_PARENTDRAG)
      GUICtrlSetFont(-1,12,14,0,"Comic Sans MS")
      settopbarcolor()
      GUICtrlCreateEdit("",0,20,200,70,$WS_VSCROLL)
      GUISetState(@SW_SHOW,$gui[$x])
      DllCall("user32.dll", "int", "SetParent", "hwnd", WinGetHandle($Gui[$x]), "hwnd", WinGetHandle($Main_GUI))
      $x = $x +1
    EndIf
EndFunc

Func settopbarcolor($s_control=-1)
    $Random = Random(1,6,1)
    if $Random = 1 Then
      GUICtrlSetBkColor($s_control,0x0000FF)
    elseif $Random = 2 Then
      GUICtrlSetBkColor($s_control,0x00FF00)
    elseif $Random = 3 then
      GUICtrlSetBkColor($s_control,0xFF0000)
    elseif $Random = 4 then
      GUICtrlSetBkColor($s_control,0x00FFFF)
    elseif $Random = 5 then
      GUICtrlSetBkColor($s_control,0xFF00FF)
    elseif $Random = 6 Then
      GUICtrlSetBkColor($s_control,0xFFFF00)
    EndIf
EndFunc

Func setsize()
    $Motherpos = WinGetPos($Mother_GUI)
    $Mainpos = WinGetPos($Main_GUI)
    if $Mainpos <> $Motherpos-98 or $Mainpos <> $Motherpos-40 then WinMove($Main_GUI,"",85,5,$Motherpos-98,$Motherpos-45)
EndFunc

Func SpecialEvents()
    Select
      Case @GUI_CTRLID = $GUI_EVENT_CLOSE
            Exit
    EndSelect
EndFunc

zhangji2008_201 发表于 2008-5-19 13:15:27

谢谢楼上给的例子,基本上是我想要的,我想问下,如果我要将这个嵌入的窗口固定,怎么办,在我的程序中,我要嵌入的是一个放视频的窗口,播放时,需要点击父窗口才能看播放的画面,怎么解决?(做完后,我会将它上传供大家参考)

传说 发表于 2008-5-21 08:40:01

这个  直接做到一起不行么  做成类似pplive ppstream那样的

zhangji2008_201 发表于 2008-5-27 18:56:55

说来郁闷,我不知道是播放的插件有问题还是AU3的问题,做不成那个样。所以我只有用这种方法来解决。我做的正是一个点对点的网络电视。

dingamao 发表于 2008-5-28 11:21:38

你插入的是有声视频不?是的话,插入时不能直接用gui的方式,会有点问题的
页: [1]
查看完整版本: 如何嵌入窗口到GUI里