似乎窗口的大小,例如打开浏览器的大小,根据屏幕大小或屏幕分辨率或这些行的内容。有没有办法解决这个问题,让窗户任意高大?
答案 0 :(得分:2)
是的。您必须覆盖WM_GETMINMAXINFO。在钩子程序中,您可以设置最大x / y:
MINMAXINFO* pmmi = (MINMAXINFO*)lParam;
pmmi->ptMaxTrackSize.x = desiredY;
pmmi->ptMaxTrackSize.y = desiredX;
要在另一个进程上执行此操作,您可以将SetWindowsHookEx()与WH_GETMESSAGE一起使用。
答案 1 :(得分:2)
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$hGUI = GUICreate("", 250, 100, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_THICKFRAME))
GUICtrlCreateLabel("", 0, 0, 250, 100, -1, $GUI_WS_EX_PARENTDRAG)
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_GETMINMAXINFO, "WM_GETMINMAXINFO")
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
GUIRegisterMsg($WM_GETMINMAXINFO, "")
Exit
EndSwitch
WEnd
Func WM_GETMINMAXINFO($hWnd, $Msg, $wParam, $lParam)
#forceref $hWnd, $Msg, $wParam, $lParam
Local $minmaxinfo = DllStructCreate("int;int;int;int;int;int;int;int;int;int", $lParam)
DllStructSetData($minmaxinfo, 7, 250) ; min width
DllStructSetData($minmaxinfo, 8, 100) ; min height
DllStructSetData($minmaxinfo, 9, 3000) ; max width
DllStructSetData($minmaxinfo, 10, 3000) ; max height
Return "GUI_RUNDEFMSG"
EndFunc ;==>WM_GETMINMAXINFO
答案 2 :(得分:1)
如果您正在谈论自己的应用程序,则可以渲染最多用于GDI大小调整的16位坐标。适当回应WM_GETMINMAXINFO和其他人。
如果你正在谈论其他人,那么他们没有承诺他们会比屏幕更大,因为将他们的绘画剪辑到可见的是明智的,并且他们可能会受到其他因素(例如尺寸)的进一步限制一个小于GDI限制的DirectX表面。
如果你正在刮你,最好使用MSAA或UIA从外面操纵窗口并获取其文本。
马丁
答案 3 :(得分:1)
将(部分)回答我自己的问题。事实证明,对于我自己的WinForms应用程序的特定情况,只需将Form.MaximumSize设置为足够大的值,然后增加Form.ClientSize。我想这个MaximumSize属性是围绕其他答案中提到的WM_GETMINMAXINFO钩子的包装。