Fenster Verbesserer ;)

Wolfgang Kluge
wolfgang@vbwelt.de


Als ich vor kurzem mal versucht hab, mein Wissen über Fensternachrichten zu erweitern ist mir die Nachricht WM_MOVING ins Auge gestochen. Hört sich an, wie eine Nachricht, bevor das Fenster bewegt wird.. Gleich danach hab ich mich an verschiedene Foreneinträge, Newsgroups-Einträge usw. erinnert, in denen gefragt wird, wie man es schafft, dass ein Fenster am Rand des Desktops "einschnappt". Ebenso wie es ein paar bekannte Programme schon lange machen.

Nach kurzer Testzeit war auch schon eine Funktion da, die genau dies bewerkstelligt... aber leider so langsam und anfällig, dass ich mich nicht getraut hab, dies hier zu veröffentlichen ;)
Nun,.. wenn VB viel zu langsam ist (was nicht unerheblich daran liegt, dass VB im eigentlichen keine CallBack-Funktionen kennt), dann Hilft C wohl aus der Misere.. Und genau so ist es dann auch. Beim Umschreiben in C ist mir dann auch gleich die nächste Nachricht Namens WM_SIZING aufgefallen.. Dies (so hat sichs rausgestellt) kann verwendet werden, um ein Fenster "in Schritten" zu vergrößern/verkleiner.

Und weil ich ja grad so schön dabei war, hatte ich mir gedacht, die MinMax-Funktion auch noch mit reinzunehmen,.. Ist nicht nur schneller, sondern auch verbessert.
Zu guter letzt(vorerst mal.. es kommt mehr) hab ich noch das setzen der Transparenz unter Windows2000 mit reingenommen. Eine Überprüfung, ob es sich auch wirklich um Windows2000 handelt ist auch gleich dabei.

Das ganze ist nun eine vollwertige C++ DLL, ohne SchnickSchnack wie MFC oder ähnlichem. Muss also nicht installiert, sondern nur kopiert werden!
Verbesserungsvorschläge, Erweiterungen, Fehlerreports bitte ins Forum oder direkt an mich.

Neu, jetzt auch mit TypeLib für den leichteren Zugriff auf die Funktionen...

Die Funktion setWindowTransparency schreibt man nun richtig und dazu ist Sie noch leicht erweitert worden. Man kann nun eine Farbe als Transparent definieren.Die Funktion setWindowMagnetic arbeitet nun mit der WorkingArea(Desktop ohne Start- und Symbolleisten).Beim zurücksetzen der Funktion setWindowMinMax wird nun der Originalzustand des Maximieren-Buttons wieder hergestellt.Beim laden der DLL konnte eine Funktion unter Win9x/NT nicht gefunden werden. Dadurch wurde die Programmausführung unterbrochen.Main-Release

 Deklaration:Private Declare Sub setWindowMagnetic Lib "vbWindow.dll" (ByVal hWnd As Long, ByVal magnifyDistance As Long)
Private Declare Sub setWindowSizeSteps Lib "vbWindow.dll" (ByVal hWnd As Long, ByVal StepX As Long, ByVal StepY As Long)
Private Declare Sub setWindowMinMax Lib "vbWindow.dll" (ByVal hWnd As Long, ByVal minWidth As Long, ByVal minHeight As Long, ByVal maxWidth As Long, ByVal maxHeight As Long, ByVal allowMaximize As Boolean)
Private Declare Sub setWindowTransparency Lib "vbWindow.dll" (ByVal hWnd As Long, ByVal Tranparency As Byte, TransColor As Long)

Private Declare Sub unsetWindowMagnetic Lib "vbWindow.dll" (ByVal hWnd As Long)
Private Declare Sub unsetWindowSizeSteps Lib "vbWindow.dll" (ByVal hWnd As Long)
Private Declare Sub unsetWindowMinMax Lib "vbWindow.dll" (ByVal hWnd As Long)
Private Declare Sub unsetWindowTransparency Lib "vbWindow.dll" (ByVal hWnd As Long)

Private Declare Sub unsetAll Lib "vbWindow.dll" (ByVal hWnd As Long)




MethodeBeschreibung
setWindowMagneticMit der Funktion setWindowMagnetic wird ein Fenster beim verschieben am Rand des Dektops "eingerastet".
Die Funktion erwartet als Parameter das Fensterhandle(hWnd-Eigenschaft) und die Anzahl der Pixel, die für den magnetischen Bereich reserviert werden sollen.
setWindowMinMaxDiese Funktion erlaubt es, die Fenstergröße einzuschränken.
Als Parametere erwartet die Funktion das Fensterhandle, die minimal Breite/Höhe und die maximale Breite/Höhe. Der letzte Parameter gibt an, ob man das Fenster trotzdem noch maximieren darf(In diesem Fall wird die Funktion beim maximieren kurzfristig unterbrochen).
setWindowSizeStepsDiese Funktion erlaubt einem Fenstern die Größe nur noch in Schritten von x Pixeln zu ändern.
Als Parameter erwartet die Funktion das Fensterhandle, die Schrittweite für die Breitenänderungen(StepX) und die Schrittweite für die Höhenänderungen(StepY).
setWindowTransparencyMit dieser Funktion kann man die Transparenz einer Form in Prozent angeben. Dies Funktioniert nur unter Window2000 und höher. Als Parameter erwartet die Funktion das Fensterhandle und eine Prozentangabe für die Transparenz(100 = Unsichtbar).
Der letzte Parameter(TransColor) muss auf -1 gestellt werden, falls die Prozentangabe wirken soll. Wenn eine bestimmte Farbe als Transparent definiert werden soll, so muss diese Farbe dem letzten Parameter zugewiesen werden (in diesem Fall ist der 2. Parameter irrelevant).
unsetAllHilfsFunktion, um alle Einstellungen gleichzeitig zurückzusetzen. (zB beim Beenden des Programms)
unsetWindowMagneticzurücksetzen der Funktion setWindowMagnetic
unsetWindowMinMaxzurücksetzen der Funktion setWindowMinMax
unsetWindowSizeStepszurücksetzen der Funktion setWindowSizeSteps
unsetWindowTransparencyzurücksetzen der Funktion setWindowTranparency


Nun noch was. In der Version 1.0 ist immer nur ein Fenster pro DLL anpassbar(ausser der Funktion setWindowTranparency).
Das wird auf jedenfall noch geändert..