找回密码
 加入
搜索
查看: 8786|回复: 11

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

 火.. [复制链接]
发表于 2012-9-3 23:39:18 | 显示全部楼层 |阅读模式
建了一個 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[0][0]
IF $TLIST[$i][1]="TfrmK357Main" THEN $WINhWnd=$TLIST[$i][0]
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




圖片一



圖片二



圖片三

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2012-9-3 23:51:44 | 显示全部楼层
本帖最后由 vv3509 于 2012-9-3 23:54 编辑

这个牛  支持一下


@DesktopHeight

@DesktopWidth
 楼主| 发表于 2012-9-4 00:21:53 | 显示全部楼层
回复 2# vv3509

這兩個變數應該是 螢幕的解析度.....不過紅色區域應該要再扣除 上面的 菜單 高度 跟 下面工具列的高度@@ 就是這樣才難搞@@
发表于 2012-9-4 10:14:35 | 显示全部楼层
回复 3# kk_lee69
controlgetpos()
发表于 2012-9-5 09:25:10 | 显示全部楼层
回复 1# kk_lee69


红色这块学名叫“客户区”或“工作区”。
参见:
确定一个窗口的客户区大小
控制窗口大小例子 --> 但你要填充的结构体里的值是跟这个例子不一样的,要理解了才能自己修改。这个例子是控制鼠标拉伸后的窗体大小,而你要控制最大化后的窗体大小。
发表于 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
);
发表于 2012-9-6 17:19:27 | 显示全部楼层
简单例子:
对系统样式在中途不会改变的情况下,已经满足要求
$hWnd = WinGetHandle("标题", "文字")
$rect = WinGetPos($hWnd)
$Me = WinGetPos($form)        ;$form 为附加窗体句柄
WinMove($hWnd, "", -3, $Me[3], $rect[2], $rect[3] - $Me[3] - 10)

要自动适应各种系统样式情况,增加WinGetClientSize()获取相关数据
 楼主| 发表于 2012-9-6 18:14:08 | 显示全部楼层
回复 9# liongodmien
我懂這個意思  但是 重點在於  我的是第三方軟件 本身可以放到最大化

一旦放到最大化以後 就會超出工作區域....所以才頭痛呢
发表于 2012-9-6 18:17:52 | 显示全部楼层
屏蔽掉第三方窗体的最大化消息
发表于 2012-9-9 14:19:43 | 显示全部楼层
回复  liongodmien
我懂這個意思  但是 重點在於  我的是第三方軟件 本身可以放到最大化

一旦放到最大 ...
kk_lee69 发表于 2012-9-6 18:14



按你的意思,就是说WINMOVE在你那不能设置已经最大化的窗口了?
 楼主| 发表于 2012-9-9 23:06:17 | 显示全部楼层
可以改變  也可以讓我設定好 我所需要的大小....但是 重點再於第三方軟件 本身有最大化的按鈕....所以當使用者 按下最大化按鈕 那就失效了...........除非我時時偵測窗口是否被移動....但是這樣太過耗損資源吧...

所以我想從 父跟子的關係著手.... 讓第三方軟件的最大化 只限定於 我的父窗口
 楼主| 发表于 2012-9-9 23:06:52 | 显示全部楼层
回复 12# liongodmien


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

所以我想從 父跟子的關係著手.... 讓第三方軟件的最大化 只限定於 我的父窗口
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-22 00:32 , Processed in 0.081258 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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