WinFuture-Forum.de: C# WPF Fensterrahmen selber programmieren - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

C# WPF Fensterrahmen selber programmieren

#1 Mitglied ist offline   Ludacris 

  • Gruppe: Moderation
  • Beiträge: 4.502
  • Beigetreten: 28. Mai 06
  • Reputation: 178

geschrieben 06. Dezember 2010 - 15:12

Ich arbeite gerade an nem projekt, bei dem das end ergebniss keine aero rahmen haben soll, sondern eben andere. die Events wie Schließen, Maximieren, minimieren und wiederherstellen hab ich schon, das fenster kann auch schon herumgezogen werden, nur fehlt mir jetzt noch ne funktion mit der ich die fenstergröße via maus verändern kann (so wie mit jedem anderen window border)

wenn jemand ne ahnung hat wie das geht, bitte sagts mir - google gibt mir nur infos über fensterbilder aus :blink:

edit: momentan experimentiere ich mit "mausposition holen -> maus bewegung analysieren -> fenstergröße verändern"- funktioniert nicht wirklich

Dieser Beitrag wurde von Ludacris bearbeitet: 06. Dezember 2010 - 15:20

0

Anzeige

#2 Mitglied ist offline   Ludacris 

  • Gruppe: Moderation
  • Beiträge: 4.502
  • Beigetreten: 28. Mai 06
  • Reputation: 178

geschrieben 10. Dezember 2010 - 01:04

hat denn keiner ne ahnung?
0

#3 Mitglied ist offline   aeris 

  • Gruppe: aktive Mitglieder
  • Beiträge: 128
  • Beigetreten: 06. September 08
  • Reputation: 11

geschrieben 10. Dezember 2010 - 17:38

Ich hab das mal vor Ewigkeiten gemacht, ob das noch aktuell ist und noch funktioniert weisz ich allerdings nicht.

Ich hatte 4 rectangles (rechts, unten, links und die Ecke rechts unten) welches auf die Maus reagiert.

XAML:
<Rectangle Name="ResizeWidth" Cursor="SizeWE" HorizontalAlignment="Right" Width="13.225" Fill="Transparent" MouseLeftButtonDown="Resize_Init" MouseLeftButtonUp="Resize_End" MouseMove="Resizeing_Form" Margin="0,16.25,-5.875,11.75"></Rectangle>

<Rectangle Name="ResizeWidthL" Cursor="SizeWE" HorizontalAlignment="Left" Width="7.75" Fill="Transparent" MouseLeftButtonDown="Resize_Init" MouseLeftButtonUp="Resize_End" MouseMove="Resizeing_Form" Margin="-6.25,6,0,1.7"></Rectangle>

<Rectangle Name="ResizeHeigth" VerticalAlignment="Bottom" Cursor="SizeNS" Height="12.15" Fill="Transparent" MouseLeftButtonDown="Resize_Init" MouseLeftButtonUp="Resize_End" MouseMove="Resizeing_Form" Margin="1.55,0,12,-6.125"></Rectangle>

<Rectangle Name="ResizeCorner" Cursor="SizeNWSE" Fill="Transparent" Margin="0,0,-5.875,-6.125" Height="18" HorizontalAlignment="Right" VerticalAlignment="Bottom" Width="18" MouseLeftButtonDown="Resize_Init" MouseLeftButtonUp="Resize_End" MouseMove="Resizeing_Form"/>


Und der Codebehind:
bool ResizeInProcess = false;
double ResizeStartPoint;
double ResizeStartWidth;

private void wnd_Main_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
	try
	{
		if (!ResizeInProcess)
			DragMove();
	}
	catch { }
}
		
private void Resize_Init(object sender, MouseButtonEventArgs e)
{
	Rectangle senderRect = sender as Rectangle;
	if (senderRect != null)
	{
		ResizeStartPoint = this.Left;
		ResizeStartWidth = this.Width;
		ResizeInProcess = true;
		senderRect.CaptureMouse();
	}
}

private void Resize_End(object sender, MouseButtonEventArgs e)
{
	Rectangle senderRect = sender as Rectangle;
	if (senderRect != null)
	{
		ResizeInProcess = false;
		senderRect.ReleaseMouseCapture();
	}
}

private void Resizeing_Form(object sender, MouseEventArgs e)
{
	if (ResizeInProcess)
	{
		Rectangle senderRect = sender as Rectangle;
		if (senderRect != null)
		{
			double width = Mouse.GetPosition(this).X;
			double height = Mouse.GetPosition(this).Y;

			senderRect.CaptureMouse();

			if (senderRect.Name == "ResizeWidth")
			{
				width += 23;
				if (width > 270)
					this.Width = width;
			}
			else if (senderRect.Name == "ResizeHeigth")
			{
				height += 23;
				if (height > 392)
					this.Height = height;
			}
			else if (senderRect.Name == "ResizeWidthL")
			{
				if (Width >= 270)
				{
					this.Left = wnd_Contactlist.PointToScreen(Mouse.GetPosition(this)).X;
					this.Width = ResizeStartWidth + (ResizeStartPoint - this.Left);
				}
				else
				{
					double tleft = wnd_Contactlist.PointToScreen(Mouse.GetPosition(this)).X;
					if (tleft < this.Left)
					{
						this.Left = tleft;
						this.Width = ResizeStartWidth + (ResizeStartPoint - this.Left);
					}
				}
			}
			else if (senderRect.Name == "ResizeCorner")
			{
				width += 23;
				if (width > 270)
					this.Width = width;

				height += 23;
				if (height > 392)
					this.Height = height;
			}
		}
	}
}

0

#4 Mitglied ist offline   Ludacris 

  • Gruppe: Moderation
  • Beiträge: 4.502
  • Beigetreten: 28. Mai 06
  • Reputation: 178

geschrieben 12. Dezember 2010 - 18:02

ok danke, werds mir mal anschaun und dir dann bescheid geben!
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0