Fenstergröße ändern


#1
hi,

also ich hab ein Rechteck mit abgerundeten Ecken als Fenster, dass standart Fenster drumherum hab ich ausgeblendet ... nun will ich das der user ganz normal die fenster größe ändern kann, durch ziehen am rand wie man es gewohnt is

nun dacht ich mir erst mach ich halt ne Transperente Border drumherum auf der man dann die maus gedrückt hält um zu ziehen
aber das problem dabei is das ich ja nicht unterscheiden kann an welchen rand er sich befindet (also oben/unten oder an den seiten) bzw. an welcher ecke
je nachdem is ja das ziehverhalten anders und der cursor muss ich ja auch entsprechend anpassen

wie kann ich bei dem problem vorgehen?
 

Shakie

Erfahrenes Mitglied
#2
Wieso kannst du nicht unterscheiden, auf welchen Rand geklickt wurde? Du kennst doch die Mausposition und die Border-Position sowie Größe, oder nicht?
 
#3
hmm Border Position? nee sry das find ich nich ...
ich ich muss doch rausbekommen ob auf den linken, rechten, oberen oder den unteren teil des Borders geklickt wird ... plus alle 4 ecken ... sry aber ich bin echt grad ratlos
 
#5
hmm ich bin mir nich sicher was du meinst ... also normaler weise regiere ich mit den events des entsprechenden steuerelements ... aber Border hat ja nich für jede seite und ecke ein eigenes mouseDown oder over (oder was auch immer) event sondern nur eins was den kompletten Border betrifft

ich hoffe ich konnts deutlich erklären ^^
 

Lime

frisch fruchtig
#7
Theoretisch kann man ein Fenster eh nur nach rechts, bzw. unten vergrößern. Oberer und linker Rand sind normalerweise nicht verstellbar, wodurch ein kleiner-machen nicht möglich ist (in deinem Fall wäre das das Problem.)

Theoretisch total egal, solang du Anfangs- und Endposition hast. ;) Im Eck würd ich einfach nen quadrat reinhauen - über den Border, womit man anders vergrößern kann...

gruß
 

Lime

frisch fruchtig
#9
Also theoretisch - ich kenn mich jetzt mit silverlight null aus - müsstest du doch einen "Bereich" abtasten können?

x,y Koordinaten (Fenster ist 500breit, 300hoch in meinem Beispiel; Border hat 5px)
oben: 0,0 bis 500,5
links: 0,0 bis 5,300
unten: 0,300-5 bis 5, 300
rechts: 500-5,0 bis 500,300

allgemein:

oben: 0,0 bis window-width,5
links: 0,0 bis 5,window-height
unten: 0, windowheight minus 5 bis window-width, window-height
rechts: window-width minus 5, 0 bis window-width, window-height

wenn du noch bereiche einbauen willst für die ecken, musst du das halt anpassen
 
#11
#13
Hi

Haltet euch bitte an die Netiquette!

Die Info brauchst du doch aber nicht! Du hast die Mauspositionen, wenn sie sich bewegt und die Position des Fensters. Daraus kannst du die neue Größe berechnen
 

Lime

frisch fruchtig
#14
Wenn er das am rechten/unteren Rand macht schon.
Wenn er aber am linken Rand größer ziehen würde, würde (theoretisch) das Fenster nach rechts vergrößert werden oder liegt da ein grober Denkfehler vor?
€: Ich frag mich grad wo ich die Netiquette finde... (€: gefunden - gut versteckt am untersten Fleck)
 
Zuletzt bearbeitet:
#15
Richtig. In dem Fall muss natürklich auch die Position des Fensters angepasst werden. Anhand von Maus- und Fensterposition weiß du aber, wo du dich befindest.

@Netiquette
Dieser hast bei deiner Registrierung inkl. Forenregeln zugestimmt! ;)
 

WorldRacer

Erfahrenes Mitglied
#16
Hi,

solltest du beabsichtigen, einen anderen Fensterrahmen als den normalen Windows-Rahmen zu verwenden, schau dir mal die Custom Chrome-Library und die Microsoft.Windows.Shell.dll hier mal an:

http://www.codeproject.com/Articles/131515/WPF-Custom-Chrome-Library
http://archive.msdn.microsoft.com/WPFShell

Damit machst du dir viel weniger Aufwand als nötig. Hier und da musst du die Image-Resources noch anpassen, das Ding in den XAML deines Mainwindows einfügen und voilá: Ein neuer Rahmen.

So habe ich mir damals meinen Metro Styled Rahmen gebastelt ;) Geht ganz einfach, und selbst der Schlagschatten und die Shortcuts, die Windows bietet [Win+Links,Rechts,Oben,Unten] gehen dabei nicht verloren ;)

// Edit: Hoppla, da war der Thread älter als ich dachte... so sorry..

LG
MArco