VB-Homepage Tipp 122

MSGHOOK - Nicht verschiebbares Fenster trotz Titelleiste

... und zum vierten, Ntzung der MSGHOOK.VBX !

In einem vorangegeangenen Tipp zur MSGHOOK.VBX ging es um das Unterbinden der Fenstervergrößerung durch den User, hier soll nun das Ganze erweitert werden, auf das Unterbinden des Verschiebens eines Fensters, trotz das das Fenster über eine normale Titelleiste verfügt.

Und wieder ist es die MSGHOOK.VBX die für uns diesen Job übernimmt.

festpos.mak
FESTPOS.FRM
FESTPOS.BAS
MSGHOOK.VBX
ProjWinSize=146,237,261,215
ProjWinShow=2
IconForm="Form1"
Title="Feststehende Fensterposition"
ExeName="FESTPOS.EXE"

festpos.bas
Option Explicit
' Windows declarations
Declare Sub hmemcpy Lib "Kernel" (lpDest As Any, lpSource As Any, ByVal nCount As Long)
' Windows constants
Global Const WM_WINDOWPOSCHANGING = &H46
Global Const SWP_NOSIZE = &H1
Global Const SWP_NOMOVE = &H2
' Windows data types
Type WINDOWPOS
hWnd As Integer
hwndInsertAfter As Integer
x As Integer
y As Integer
cx As Integer
cy As Integer
flags As Integer
End Type

festpos.frm
VERSION 2.00
Begin Form Form1
Caption = "Nichtverschiebbares / Nichtvergrößerbares Fenster"
ClientHeight = 990
ClientLeft = 2220
ClientTop = 3765
ClientWidth = 5640
Height = 1395
Left = 2160
LinkTopic = "Form1"
MinButton = 0 'False
ScaleHeight = 990
ScaleWidth = 5640
Top = 3420
Width = 5760
Begin MsgHook MsgHook
Left = 120
Top = 840
End
Begin Label Label1
Alignment = 2 'Center
Caption = "Na versuchs doch mal"
FontBold = -1 'True
FontItalic = 0 'False
FontName = "Times New Roman"
FontSize = 24
FontStrikethru = 0 'False
FontUnderline = 0 'False
Height = 615
Left = 120
TabIndex = 0
Top = 120
Width = 5415
End
End
Option Explicit
Sub Form_Load ()
form1.Left = screen.Width / 2 - form1.Width / 2
form1.Top = screen.Height / 2 - form1.Height / 2
MsgHook.HwndHook = Me.hWnd
MsgHook.Message(WM_WINDOWPOSCHANGING) = True
End Sub
Sub MsgHook_Message (msg As Integer, wParam As Integer, lParam As Long, result As Long)
Dim WinPosition As WINDOWPOS
If msg = WM_WINDOWPOSCHANGING Then
' Copy data to our local variable
Call hmemcpy(WinPosition, ByVal lParam, Len(WinPosition))
' Tell Windows to ignore new position
WinPosition.flags = WinPosition.flags Or SWP_NOMOVE Or SWP_NOSIZE
' Copy data back to Windows
Call hmemcpy(ByVal lParam, WinPosition, Len(WinPosition))
result = 0
End If
End Sub

Wenn Sie diesen Tipp nutzen möchten, erstellen Sie mit einem Editor
Dateien die Sie wie angegeben benennen und fügen den Code ein.
Desweiteren benötigen Sie die MSGHOOK.VBX, die Sie in Ihr Windows/System Verzeichnis kopieren.

Tipp-Download

Quelle : J.Wood & K.Peterson

Zurück zur Übersichtsseite