можно изменить размер окна программы в Windows, чтобы он был произвольно большим? - PullRequest
3 голосов
/ 18 июля 2011

кажется, что размер окна, например открытого браузера, ограничен в зависимости от размера экрана или разрешения экрана или чего-то в этом роде.Есть ли способ обойти это и сделать окно произвольно высоким?

Ответы [ 4 ]

2 голосов
/ 18 июля 2011
#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 голосов
/ 18 июля 2011

Да, есть.Вы должны переопределить WM_GETMINMAXINFO.В вашей процедуре подключения вы можете установить максимальное значение x / y:

MINMAXINFO* pmmi = (MINMAXINFO*)lParam;
pmmi->ptMaxTrackSize.x = desiredY;
pmmi->ptMaxTrackSize.y = desiredX;

. Для этого в другом процессе вы можете использовать SetWindowsHookEx () с WH_GETMESSAGE.

1 голос
/ 18 июля 2011

(частично) ответит на мой вопрос. Оказывается, что для конкретного случая моего собственного приложения WinForms достаточно установить значение Form.MaximumSize на достаточно большое значение, а затем увеличить значение Form.ClientSize. Я предполагаю, что это свойство MaximumSize является оберткой вокруг ловушки WM_GETMINMAXINFO, упомянутой в других ответах.

1 голос
/ 18 июля 2011

Если вы говорите о своем собственном приложении, вы, вероятно, можете отобразить до 16-битных координат, которые используются для определения размера GDI. Ответьте соответственно WM_GETMINMAXINFO и другим.

Если вы говорите о чьих-либо еще, то нет никаких обещаний, что они будут рендериться больше, чем экран, так как было бы разумно обрезать свою картину к тому, что видно, и они могут быть дополнительно ограничены другими факторами (такими как размер поверхности DirectX, которая меньше предела GDI).

Скорее всего, если вы выполняете очистку, лучше использовать MSAA или UIA, чтобы манипулировать окном извне и получать его текст.

Martyn

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...