ウィンドウの最小および最大サイズを制限するには、方法

文書翻訳 文書翻訳
文書番号: 185733
すべて展開する | すべて折りたたむ

目次

概要

既定では、必要な任意のサイズにサイズを変更するのには、フォームの Visual Basic をことができます。BorderStyle が適切に設定されている場合。でも、そのことがあります。望ましいまたは、ウィンドウのサイズの範囲を制限するために必要な (、小さいか、事前に定義されたサイズよりも大きくすることはできません)。

たとえば、Windows のアクセサリ、Microsoft ペイント ウィンドウ防ぐことができます。特定の位置のサイズからされています。これは、ユーザーに許可する必要があります。常に表示、編集、画像の一部で、少なくとも。

Windows API 関数の補助装置には、この同じ得ることができます。Visual Basic アプリケーションで機能します。

詳細

警告: を使用して、この資料のサンプル コードを AT です。個人の責任。マイクロソフトの保証もなしでは、"このサンプル コードが用意されています任意の種類は、明示または黙示にかかわらずを含むがないものが黙示的な一切の目的。

デモンストレーションを行うサンプル アプリケーションを作成する手順を以下に示します、上で説明した動作です。この機能と呼ばれる概念を実現するのにはタイミングを検出するためにサブクラス化を使用する必要がある WM_GETMINMAXINFO メッセージ発生します。このメッセージは、ウィンドウのサイズを変更しようとしたときに発生します。

サブクラス化の詳細については、次の資料を参照してください。技術情報:
168795。 AddressOf を使用して、ウィンドウのメッセージ フック方法

アプリケーションで、ウィンドウの破棄の前に障害が発生します。エラー、無効なページ フォールト、およびデータの損失します。この問題が発生することができる場合は、新しい WindowProc 関数が存在しないするには、ポイントしているが、ウィンドウ変更は通知されません。サブクラス化されたウィンドウを常に外しますサブクラス化されたフォームをアンロードまたはアプリケーションを終了します。これです。これを使用するアプリケーションのデバッグ中に特に重要ですMicrosoft Visual Basic の開発環境内の技術。終了をクリックするとボタンまたは、[実行] メニューの [クリックすると終了せずunhooking でページ違反の原因と Microsoft Visual Basic を閉じます。

サンプル アプリケーションの作成手順

  1. 新規の標準 EXE プロジェクトを作成します。
  2. 次のコードを Form1 のコード モジュールに貼り付けます。
          Option Explicit
    
          Private Sub Form_Load()
              'Save handle to the form.
              gHW = Me.hwnd
    
              'Begin subclassing.
              Hook
          End Sub
    
          Private Sub Form_Unload(Cancel As Integer)
              'Stop subclassing.
              Unhook
          End Sub
    
    						
  3. 標準モジュールをプロジェクトに追加します。
  4. 次のコード モジュールに貼り付けます。
          Option Explicit
    
          Private Const GWL_WNDPROC = -4
          Private Const WM_GETMINMAXINFO = &H24
    
          Private Type POINTAPI
              x As Long
              y As Long
          End Type
    
          Private Type MINMAXINFO
              ptReserved As POINTAPI
              ptMaxSize As POINTAPI
              ptMaxPosition As POINTAPI
              ptMinTrackSize As POINTAPI
              ptMaxTrackSize As POINTAPI
          End Type
    
          Global lpPrevWndProc As Long
          Global gHW As Long
    
          Private Declare Function DefWindowProc Lib "user32" Alias _
             "DefWindowProcA" (ByVal hwnd As Long, ByVal wMsg As Long, _
              ByVal wParam As Long, ByVal lParam As Long) As Long
          Private Declare Function CallWindowProc Lib "user32" Alias _
             "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _
              ByVal hwnd As Long, ByVal Msg As Long, _
              ByVal wParam As Long, ByVal lParam As Long) As Long
          Private Declare Function SetWindowLong Lib "user32" Alias _
             "SetWindowLongA" (ByVal hwnd As Long, _
              ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
          Private Declare Sub CopyMemoryToMinMaxInfo Lib "KERNEL32" Alias _
             "RtlMoveMemory" (hpvDest As MINMAXINFO, ByVal hpvSource As Long, _
              ByVal cbCopy As Long)
          Private Declare Sub CopyMemoryFromMinMaxInfo Lib "KERNEL32" Alias _
             "RtlMoveMemory" (ByVal hpvDest As Long, hpvSource As MINMAXINFO, _
              ByVal cbCopy As Long)
    
          Public Sub Hook()
              'Start subclassing.
              lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, _
                 AddressOf WindowProc)
          End Sub
    
          Public Sub Unhook()
              Dim temp As Long
    
              'Cease subclassing.
              temp = SetWindowLong(gHW, GWL_WNDPROC, lpPrevWndProc)
          End Sub
    
          Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, _
             ByVal wParam As Long, ByVal lParam As Long) As Long
              Dim MinMax As MINMAXINFO
    
              'Check for request for min/max window sizes.
              If uMsg = WM_GETMINMAXINFO Then
                  'Retrieve default MinMax settings
                  CopyMemoryToMinMaxInfo MinMax, lParam, Len(MinMax)
    
                  'Specify new minimum size for window.
                  MinMax.ptMinTrackSize.x = 200
                  MinMax.ptMinTrackSize.y = 200
    
                  'Specify new maximum size for window.
                  MinMax.ptMaxTrackSize.x = 500
                  MinMax.ptMaxTrackSize.y = 500
    
                  'Copy local structure back.
                  CopyMemoryFromMinMaxInfo lParam, MinMax, Len(MinMax)
    
                  WindowProc = DefWindowProc(hw, uMsg, wParam, lParam)
              Else
                  WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, _
                     wParam, lParam)
              End If
          End Function
    
    						
  5. 保存し、サンプル アプリケーションを実行します。
  6. Form1 のサイズを変更しようとしてください。

    結果: フォーム 200 で 200 より小さいサイズにすることはできません。ピクセルまたは 500 で 500 ピクセルより大きい。

関連情報

詳細については、次の資料を参照してください、技術情報:
168795。 AddressOf を使用して、ウィンドウのメッセージ フック方法

プロパティ

文書番号: 185733 - 最終更新日: 2011年7月6日 - リビジョン: 5.0
キーワード:?
kbhowto kbgrpdsvb kbmt KB185733 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:185733
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com