Feedback

C# - Form ohne Rahmen verschieben

Veröffentlicht von am 1/15/2011
(3 Bewertungen)
Mit diesem Snippet kann man Forms per gedrückter Maustaste verschieben. Einfach auf eine Freie Stelle in der Form klicken und verschieben!

Einfach in die Form kopieren, welche bewegt werden soll!
protected override void WndProc(ref Message m)
        {
            const int WM_NCHITTEST = 0x84;
            const int HTCAPTION = 0x02;

            if (m.Msg == WM_NCHITTEST)
            {
                m.Result = (IntPtr)HTCAPTION;
            }
            else
            {
                base.WndProc(ref m);
            }
        }
Abgelegt unter form, ohne, rahmen, verschieben, bewegen, klick, verziehen, position, .

6 Kommentare zum Snippet

NoBadCode schrieb am 4/27/2011:
Ein Problem dabei ist das die Formgröße danach nicht mehr veränderbar ist. Kann man das noch ändern?
SilversunP schrieb am 4/19/2012:
genial, danke
ich verstehe den quelltext zwar überhaupt nicht, aber es funktioniert echt gut :-)
Fawk_18 schrieb am 5/7/2012:
Das Snippet greift auf die Windows API zu um die Form zu verschieben.
Kann man machen, warum aber nicht die normalen Funktionen benutzen?
dariusarnold schrieb am 2/7/2013:
Seh ich wie Fawk..
Und wenn es stimmt, dass man dann nichtmehr die Fenstergrße ändern kann, ist das ja sogar ein Nachteil gegenüber der .NET alternative..
Irgendwo hier auf DNS hab ich auchmal mal irgendne Billig-Variante gefunden, die das gleiche macht, die gefiel mir garnicht. Es wird simmuliert, dass das Fenster nicht den Fokus hat und blablabla.. Irgendwas ganz komisches.. Und im Enteffekt hat man seine Anwendung ver****** ;) << sry..
Guckt euch mal den Artikel an:
http://www.tsql.de/csharp/csharp_fenster_ohne_titelleiste_verschieben
Dovev schrieb am 6/24/2014:
Ich hätte mal eine Anfängerfrage.
Wieso wird hier "WM_NCHITTEST = 0x84" verwendet? Man sieht oft Hexadezimale Zahlen bei solchen snippets. Was genau hat das zu bedeuten? Mir fehlt leider der passende "Suchbegriff" um mich darüber zu informieren.
Koopakiller schrieb am 6/25/2014:
Hallo Dovev,
WM_NCHITTEST ist eine von vielen Windows Meldungen (WM = Window Message). HTCAPTION ist eine anderweitige Konstante, wovon es auch tausende gibt.
Der Name setzt sich meistens aus einer Reihe von Abkürzungen zusammen. (NC = Non Client = Fensterrahmen, HT = Hit Test = "Treffertest", Caption = "Titelleiste")
Wenn du so eine Konstante brauchst, sind sie i.d.R. in der MSDN mit Werten zu finden. Von den Funktionen, die die Werte benötigen erhälst du i.d.R. wenigstens die Namen der Konstanten.

In der MSDN wiederum sind die Werte i.d.R. als Hexadezimalwerte angegeben. Das hat den Vorteil, das wenn man Bitoperationen durchführt, auch mal schnell etwas im Kopf überschlagen kann (HexDez ist ähnlich zum Binärsystem, da es nur ein "vielfaches" davon ist). Das ist für die meisten Menschen im Dezimalsystem fast unmöglich.

Siehe auch:
About Messages and Message Queues
http://msdn.microsoft.com/en-us/library/windows/desktop/ms644927.aspx
Mouse Input Notifications
http://msdn.microsoft.com/en-us/library/windows/desktop/ff468877.aspx
Hit Test Return Values
http://msdn.microsoft.com/en-us/library/windows/desktop/bb773206.aspx
> Diw MSDN zur WinAPI ist nur zum kleinen Teil in Deutsch verfügbar

PS: Unter C++ müsste man nur den richtigen Header einbinden um die Konstanten zu bekommen. .NET hat das nicht, somit müssen die Konstanten selbst deklariert werden.
 

Logge dich ein, um hier zu kommentieren!