*Click* Verschieben eines Fensters..?

Snipero

Mitglied
Hallo,
ich habe eine "none frame" Form erstellt und die nach meinen Vorstellungen designt!
So, nun möchte ich aber, wie es auch in den Standard Rahmen von Win möglich ist, per klick auf den Rahmen (in meinem Fall ein ausgewähltes Objekt) mein Fenster verschieben, da dies ja fixiert ist... :confused:

Wisst ihr wie ich das realisieren kann?

MFG:
Snipero
 
Hi.

Code:
private System.Windows.Forms.Panel pTopBar;

public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HTCAPTION = 0x2;
[DllImport("User32.dll")]
public static extern bool ReleaseCapture();
[DllImport("User32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

Das Panel ist sagen wir der Bereich mit dem das Verschieben möglich sein soll.

Code:
private void pTopBar_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
  if (e.Button == MouseButtons.Left)
  {
    ReleaseCapture();
    SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
  } 
}

Tada! Geht. =)


MfG,
Alex
 
Mhh ich glaube ich habe etwas vergessen zu sagen :(
Ich arbeite eigentlich mit Visual Basic .NET und nicht mit C# o.a.

Sorry, dass ich dir dir arbeit gemacht habe...
Weißt du zufällig auch wie das im VB geht?
 
Es geht gleich, nur mit anderer Syntax.

Code:
<DllImport(User32.dll")> Public Shared Sub ReleaseCapture() as Bool
<DllImport(User32.dll")> Public Shared Sub SendMessage(ByVal hWnd as IntPtr, ByVal Msg as Int32, ByVal wParam as Int32, ByVal lParam as Int32) as Int32

So dürften die DllImports in Vb.net aussehen.
Den Rest schreib bitte selber, VB.net Syntax kann ich zwar lesen, aber schreiben ist dann schon ein wenig schwieriger.

Folgende Variablen habe ich verwendet.
WM_NCLBUTTONDOWN ist ein Integer mit dem Hex-Wert 0xA1,
HTCAPTION ist auch ein Integer und hat den Wert 0x2.

Die Dll Imports hab ich dir eh schon oben nochmal geschrieben, brauchst nur noch MouseDown Event bei deiner Fläche mit der man verschieben können soll.
Dort fragst noch ab, ob die linke Maustaste benutzt wurde, und rufst dann einfach die importierte Methode ReleaseCapture und danach SendMessage auf.

Bei letzterer übergibst du als Parameter das Handle des Formulars (me.Handle schätze ich), dann WM_NCLBUTTONDOWN, HTCAPTION und zuletzt eine 0.

Und fertig! Ist genau so wie in C# nur halt mit anderer Syntax.
 
Bischen überlegen und die Syntax anpassen. Also von vb.net auf c#.net umzudenken ist nun wirklich keine Kunst -.-*
Das schaff selbst ich als MonsterAnfänger :-(
 
@ zioProduct
Ne, ich find das nicht einfach die Syntax umzu "denken"!
Ich finde ganz VS ziemlich kompliziert!
Ich programmiere eigentlich nur in der VCL
Aber ich musste mal ein kleines tool im VS schreiben... ;)

Und @ Alexander danke! ;)
Ich werde das mal testen...
 
Zurück