Bagaimana Limit Minimum dan maksimum ukuran jendela

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 185733 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Secara default, Visual Basic memungkinkan bentuk yang akan diubah ukurannya untuk setiap ukuran yang Anda inginkan disediakan BorderStyle diatur dengan tepat. Kadang-kadang, mungkin diinginkan atau diperlukan untuk membatasi berbagai ukuran jendela (seperti itu tidak boleh lebih kecil atau lebih besar dari ukuran yang telah ditentukan).

Sebagai contoh, aksesori Windows, Microsoft Paint, mencegah jendela yang dari yang berukuran di bawah titik tertentu. Hal ini dilakukan untuk memungkinkan pengguna untuk selalu melihat setidaknya sebagian dari mereka adalah editing gambar.

Dengan bantuan dari fungsi Windows API, Anda dapat mencapai ini sama fungsi dalam aplikasi Visual Basic.

INFORMASI LEBIH LANJUT

PERINGATAN: PENGGUNAAN OLEH ANDA KODE CONTOH YANG TERSEDIA DI DALAM ARTIKEL INI ADALAH PADA RISIKO ANDA SENDIRI. Microsoft menyediakan kode contoh ini "sebagaimana adanya" tanpa garansi apapun, baik tersurat maupun tersirat, termasuk tetapi tidak terbatas pada jaminan tersirat mengenai keadaan yang dapat diperjualbelikan dan/atau kesesuaian untuk tertentu tujuan.

Berikut adalah langkah-langkah untuk membuat aplikasi sampel menunjukkan perilaku yang dibahas di atas. Untuk mencapai fungsi ini, sebuah konsep yang dikenal sebagai subclassing harus digunakan untuk mendeteksi ketika pesan WM_GETMINMAXINFO terjadi. Pesan ini terjadi ketika dilakukan usaha untuk mengubah ukuran jendela.

Untuk informasi lebih lanjut tentang subclassing, silakan lihat artikel berikut di Basis Pengetahuan Microsoft:
168795: Bagaimana untuk Hook ke jendela pesan menggunakan AddressOf

Kegagalan untuk melepas kaitan sebuah jendela sebelum kehancuran hasil dalam aplikasi kesalahan, kesalahan halaman tidak sah, dan kehilangan data. Masalah ini dapat terjadi ketika fungsi WindowProc baru menunjuk ke tidak lagi ada, tetapi jendela tidak telah diberitahu perubahan. Selalu melepas kaitan jendela subclassed Setelah bongkar muat bentuk subclassed atau keluar aplikasi. Ini adalah terutama penting sementara debug aplikasi yang menggunakan ini teknik dalam lingkungan pengembangan Visual Basic Microsoft. Mengklik akhir tombol atau, pada Run menu, mengklik berakhir, tanpa unhooking penyebab kegagalan halaman tidak sah dan menutup Microsoft Visual Basic.

Langkah-langkah untuk membuat contoh aplikasi

  1. Buat projek Standard EXE yang baru.
  2. Paste kode berikut ke Form1's kode modul:
          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. Menambahkan modul standar untuk proyek.
  4. Paste kode berikut ke dalam modul:
          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. Simpan dan menjalankan aplikasi sampel.
  6. Mencoba untuk mengubah ukuran Form1.

    HASIL: Bentuk tidak diperbolehkan untuk berukuran lebih kecil daripada 200 oleh 200 piksel atau lebih besar dari 500 oleh 500 piksel.

REFERENSI

Untuk informasi tambahan, lihat article(s) berikut di Basis Pengetahuan Microsoft:
168795: Bagaimana untuk Hook ke jendela pesan menggunakan AddressOf

Properti

ID Artikel: 185733 - Kajian Terakhir: 16 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Control Creation Edition
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
Kata kunci: 
kbgrpdsvb kbhowto kbmt KB185733 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:185733

Berikan Masukan

 

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