求助计算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:54 编辑
这个牛支持一下
@DesktopHeight
@DesktopWidth 回复 2# vv3509
這兩個變數應該是 螢幕的解析度.....不過紅色區域應該要再扣除 上面的 菜單 高度 跟 下面工具列的高度@@ 就是這樣才難搞@@ 回复 3# kk_lee69
controlgetpos(){:face (280):} 回复 1# kk_lee69
红色这块学名叫“客户区”或“工作区”。
参见:
确定一个窗口的客户区大小
控制窗口大小例子 --> 但你要填充的结构体里的值是跟这个例子不一样的,要理解了才能自己修改。这个例子是控制鼠标拉伸后的窗体大小,而你要控制最大化后的窗体大小。 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
); 简单例子:
对系统样式在中途不会改变的情况下,已经满足要求
$hWnd = WinGetHandle("标题", "文字")
$rect = WinGetPos($hWnd)
$Me = WinGetPos($form) ;$form 为附加窗体句柄
WinMove($hWnd, "", -3, $Me, $rect, $rect - $Me - 10)
要自动适应各种系统样式情况,增加WinGetClientSize()获取相关数据 回复 9# liongodmien
我懂這個意思但是 重點在於我的是第三方軟件 本身可以放到最大化
一旦放到最大化以後 就會超出工作區域....所以才頭痛呢 屏蔽掉第三方窗体的最大化消息 回复liongodmien
我懂這個意思但是 重點在於我的是第三方軟件 本身可以放到最大化
一旦放到最大 ...
kk_lee69 发表于 2012-9-6 18:14 http://www.autoitx.com/images/common/back.gif
按你的意思,就是说WINMOVE在你那不能设置已经最大化的窗口了? 可以改變也可以讓我設定好 我所需要的大小....但是 重點再於第三方軟件 本身有最大化的按鈕....所以當使用者 按下最大化按鈕 那就失效了...........除非我時時偵測窗口是否被移動....但是這樣太過耗損資源吧...
所以我想從 父跟子的關係著手.... 讓第三方軟件的最大化 只限定於 我的父窗口 回复 12# liongodmien
可以改變也可以讓我設定好 我所需要的大小....但是 重點再於第三方軟件 本身有最大化的按鈕....所以當使用者 按下最大化按鈕 那就失效了...........除非我時時偵測窗口是否被移動....但是這樣太過耗損資源吧...
所以我想從 父跟子的關係著手.... 讓第三方軟件的最大化 只限定於 我的父窗口
页:
[1]