ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 27.08.2001

Diese Seite wurde zuletzt aktualisiert am 27.08.2001
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

MDI-Kinder mit festen Größen

Zurück...


Anzeige

(-hg) mailto:hg_fixedmdichild@aboutvb.de

Eigentlich widersprechen sie ja den MDI-Fenster-Konventionen: MDI-Kind-Forms mit fester, unveränderlicher Größe. Sie können allerdings ohne weiteres bei einem MDI-Kind-Form die BorderStyle-Eigenschaft auf jeden anderen Wert als "2 - Änderbar" setzen. Bei den Werten 1, 3 und 4 wird tatsächlich auch wie erwartet die Größe fixiert. Doch wie Sie in der folgenden Abbildung sehen können, verbleibt unter Umständen (abhängig von Grafiktreiber und Windows-Version) einer kleiner Saum zwischen dem eigentlichen, nun dünneren Rahmen des Forms und seiner Innenfläche.

Bei einem MDI-Kind-Form mit fester Größe kann ein deutlich sichtbarer Saum am Rahmen auftreten

Bei einem MDI-Kind-Form mit fester Größe kann ein deutlich sichtbarer Saum am Rahmen auftreten

Der Saum entsteht, weil die MDI-Maschinerie, die an sich für die Darstellung der MDI-Kind-Forms zu sorgen hat, die von Ihnen eigenmächtig gewählte, "illegale" Rahmenform gar nicht mitbekommt. Der Rahmen wird zwar korrekt dünner, doch der Innenbereich des Forms füllt den somit mehr zur Verfügung stehenden Platz nicht von alleine aus. Ein Teil der Windows-Fensterverwaltung ist jedoch durchaus der Ansicht, dass der Bereich dieses Saums sehr wohl zum Innenbereich zu gehören hat, und sorgt daher bei gravierenden Änderungen des Fensterzustandes (erstmaliges Anzeigen usw.) dafür, dass das Paint-Ereignis des MDI-Kind-Forms ausgelöst wird. Dies machen wir uns zu Nutze, indem wir aus der Paint-Ereignisprozedur heraus die API-Funktion SetWindowPos (verpackt in der Hilfsprozedur FixedMDIChildPaint) aufrufen. Mit einem ganzen Rattenschwanz an kombinierten Konstanten der Art SWP_NOirgendwas verhindern wir, dass die Funktion die ihr eigentlich ihrem Namen entsprechend zugedachte Aufgabe vergisst und lediglich den hinter der Konstanten SWP_FRAMECHANGED steckenden Auftrag ausführt, sich um eine Neuberechnung und Neudarstellung des Rahmens zu kümmern.


Die ausdrückliche Aktualisierung des Rahmens beseitigt den Saum

Die ausdrückliche Aktualisierung des Rahmens beseitigt den Saum

Im MDI-Kind-Form:

Private Sub Form_Paint()
  FixedMDIChildPaint Me
End Sub

Und in einem Standard-Modul:

Private Declare Function SetWindowPos Lib "user32" _
 (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
 ByVal x As Long, ByVal y As Long, ByVal cx As Long, _ 
ByVal cy As Long, ByVal wFlags As Long) As Long

Public Sub FixedMDIChildPaint(Form As Form)
  Const SWP_NOMOVE = &H2
  Const SWP_NOZORDER = &H4
  Const SWP_NOACTIVATE = &H10
  Const SWP_FRAMECHANGED = &H20
  Const SWP_NOOWNERZORDER = &H200
  Const SWP_NOSIZE = &H1
  
  SetWindowPos Form.hwnd, 0, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE _
   Or SWP_NOZORDER Or SWP_NOOWNERZORDER Or SWP_FRAMECHANGED
End Sub

Beispiel-Projekt und Modul modFixedMDIChild (fixedmdichild.zip - ca. 3,9 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche




Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer