2011-07-17 4 views

答えて

1

自分のアプリケーションについて話している場合、おそらくGDIサイジングに使用される16ビットの座標までレンダリングできます。 WM_GETMINMAXINFOなどに適切に応答します。

他人のことを話している場合、自分のペイントを目に見えるものにクリップするのが賢明であるため、画面よりも大きくレンダリングするという約束はなく、他の要因(たとえばDirectXサーフェスのサイズはGDI制限よりも小さい)。

あなたが掻き分けている場合は、MSAAまたはUIAを使用してウィンドウを外部から操作してテキストを取得する方がよいでしょう。

マーティン

+0

Martyn、 "MSAAまたはUIA"のビットを詳しく教えてください。元の問題は今のところ解決されているようですが、ここで私と他の読者の両方にとって「知識は良い」です:) – EndangeringSpecies

+0

MSAA(古い)とUIA(新しい)は、アクセシビリティツール(スクリーンリーダーなど)のためにWindowsによって提供される2つのアクセシビリティAPIです。 )を使用して、画面上のUIを取得して変更します。これは、テスト、スクリーンスクレイピングなどのような他のものにとって非常に便利です。MSDNでは、hwnd UIのすべてがWM_GETOBJECTで始まるため、これらはよく文書化されています。 –

2

はいあります。 WM_GETMINMAXINFOを上書きする必要があります。あなたのフックプロシージャでは、最大のx/yを設定することができます。

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

あなたはWH_GETMESSAGEでは、SetWindowsHookEx()を使用することができ、別のプロセスでこれを行うには。

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 
1

は(部分的に)自分の質問にお答えします。私自身のWinFormsアプリケーションの特定のケースでは、Form.MaximumSizeを十分大きな値に設定してからForm.ClientSizeを増やすだけです。私はこのMaximumSizeプロパティは、他の答えに記載されているWM_GETMINMAXINFOフックの周りのラッパーであると思います。

関連する問題