kk_lee69 发表于 2012-9-3 23:39:18

求助计算GUI窗口的大小及如何固定第三方窗口的大小

建了一個 GUI 強制嵌入 第三方ERP軟件....但是嵌入後 放到最大 第三方軟件 原本的狀態欄會不見.....
圖片一 表示 原本ERP 的狀態欄 不見了....
圖片二 表示希望控制的範圍跟樣子
求助.....如何計算 GUI 剩餘顯示空間的 範圍......如 圖三

以及 如呵控制 第三方軟件的窗口大小跟 DISABLE 其最大化和最小化的功能......




#include <GuiConstants.au3>
#Include <GuiListView.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <WinAPI.au3>
#include <WinAPIEx.au3>
#include <GuiImageList.au3>
#include <GUIConstantsEx.au3>
#include <GuiButton.au3>
#include <ButtonConstants.au3>

Run ("C:\T357\T357.EXE","C:\T357")

WinWait("","主菜單")

Sleep(500)

$WinMain = GuiCreate('外掛測試',900,700,-1,-1,$WS_CLIPCHILDREN+$WS_MAXIMIZE+$WS_OVERLAPPEDWINDOW)




    $filemenu = GUICtrlCreateMenu("文件 &F")
    $fileitem= GUICtrlCreateMenuItem ("打開", $filemenu)
    GUICtrlSetState(-1, $GUI_DEFBUTTON)
    $helpmenu = GUICtrlCreateMenu("?")
    GUICtrlCreateMenuItem ("保存", $filemenu)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $infoitem= GUICtrlCreateMenuItem ("信息", $helpmenu)
    $exititem= GUICtrlCreateMenuItem ("退出", $filemenu)
    $recentfilesmenu = GUICtrlCreateMenu("最近的檔", $filemenu, 1)

    GUICtrlCreateMenuItem ("", $filemenu, 2) ; 創建一個分隔線

    $viewmenu = GUICtrlCreateMenu("查看", -1, 1) ; 之前創建的"?"菜單
    $viewstatusitem= GUICtrlCreateMenuItem ("狀態欄", $viewmenu)
    GUICtrlSetState(-1, $GUI_CHECKED)




$ProcessID = ProcessWait("IT357.EXE")
$TLIST=_WinAPI_EnumProcessWindows($ProcessID,1)
FOR $i=1 To $TLIST
IF $TLIST[$i]="TfrmK357Main" THEN $WINhWnd=$TLIST[$i]
Next


_WinAPI_SetParent($WINhWnd, $WinMain)

WinSetState($WINhWnd, "", @SW_MAXIMIZE)

GuiSetState()

While 1
        Switch GUIGetMsg()

                Case $GUI_EVENT_CLOSE
                        _WinAPI_SetParent($WINhWnd, 0)

                        Exit
                       
        EndSwitch
WEnd




圖片一



圖片二



圖片三

vv3509 发表于 2012-9-3 23:51:44

本帖最后由 vv3509 于 2012-9-3 23:54 编辑

这个牛支持一下


@DesktopHeight

@DesktopWidth

kk_lee69 发表于 2012-9-4 00:21:53

回复 2# vv3509

這兩個變數應該是 螢幕的解析度.....不過紅色區域應該要再扣除 上面的 菜單 高度 跟 下面工具列的高度@@ 就是這樣才難搞@@

annybaby 发表于 2012-9-4 10:14:35

回复 3# kk_lee69
controlgetpos(){:face (280):}

xiehuahere 发表于 2012-9-5 09:25:10

回复 1# kk_lee69


红色这块学名叫“客户区”或“工作区”。
参见:
确定一个窗口的客户区大小
控制窗口大小例子 --> 但你要填充的结构体里的值是跟这个例子不一样的,要理解了才能自己修改。这个例子是控制鼠标拉伸后的窗体大小,而你要控制最大化后的窗体大小。

akmm88 发表于 2012-9-5 09:46:48

windows api
BOOL GetWindowRect(
HWND hWnd,      // handle to window
LPRECT lpRect   // address of structure for window coordinates
);
BOOL GetClientRect(
HWND hWnd,      // handle to window
LPRECT lpRect   // address of structure for client coordinates
);

liongodmien 发表于 2012-9-6 17:19:27

简单例子:
对系统样式在中途不会改变的情况下,已经满足要求
$hWnd = WinGetHandle("标题", "文字")
$rect = WinGetPos($hWnd)
$Me = WinGetPos($form)        ;$form 为附加窗体句柄
WinMove($hWnd, "", -3, $Me, $rect, $rect - $Me - 10)

要自动适应各种系统样式情况,增加WinGetClientSize()获取相关数据

kk_lee69 发表于 2012-9-6 18:14:08

回复 9# liongodmien
我懂這個意思但是 重點在於我的是第三方軟件 本身可以放到最大化

一旦放到最大化以後 就會超出工作區域....所以才頭痛呢

netegg 发表于 2012-9-6 18:17:52

屏蔽掉第三方窗体的最大化消息

liongodmien 发表于 2012-9-9 14:19:43

回复liongodmien
我懂這個意思但是 重點在於我的是第三方軟件 本身可以放到最大化

一旦放到最大 ...
kk_lee69 发表于 2012-9-6 18:14 http://www.autoitx.com/images/common/back.gif


按你的意思,就是说WINMOVE在你那不能设置已经最大化的窗口了?

kk_lee69 发表于 2012-9-9 23:06:17

可以改變也可以讓我設定好 我所需要的大小....但是 重點再於第三方軟件 本身有最大化的按鈕....所以當使用者 按下最大化按鈕 那就失效了...........除非我時時偵測窗口是否被移動....但是這樣太過耗損資源吧...

所以我想從 父跟子的關係著手.... 讓第三方軟件的最大化 只限定於 我的父窗口

kk_lee69 发表于 2012-9-9 23:06:52

回复 12# liongodmien


    可以改變也可以讓我設定好 我所需要的大小....但是 重點再於第三方軟件 本身有最大化的按鈕....所以當使用者 按下最大化按鈕 那就失效了...........除非我時時偵測窗口是否被移動....但是這樣太過耗損資源吧...

所以我想從 父跟子的關係著手.... 讓第三方軟件的最大化 只限定於 我的父窗口
页: [1]
查看完整版本: 求助计算GUI窗口的大小及如何固定第三方窗口的大小