2009-08-22 11 views

Répondre

4

Vous devez retourner HTCAPTION de la WM_NCHITTEST dans votre WndProc:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    const int WM_NCHITTEST = 0x0084; 
    const int HTCLIENT = 1; 
    const int HTCAPTION = 2; 
    protected override void WndProc(ref Message msg) 
    { 
     base.WndProc(ref msg); 
     if (msg.Msg == WM_NCHITTEST && msg.Result == (IntPtr)HTCLIENT) 
     { 
      msg.Result = (IntPtr)HTCAPTION; 
     } 
    } 
} 

qui fera la zone cliente de la fenêtre semblent Windows pour être une barre de légende.

+0

Oui, cela fonctionne mais seulement si vous (pouvez) cliquer sur l'arrière-plan du formulaire. Le terme «application de note» me fait penser à une boîte de texte de remplissage de fenêtre. –

+0

Où puis-je mettre ce code? –

+0

@Henk Holterman J'ai "quelques" antécédents :) Vous n'avez pas vraiment besoin de le déplacer, il va se fermer dans 15 secondes après l'inactivité. Je veux juste donner une certaine liberté à l'utilisateur. –

0

Après avoir essayé quelque chose comme ça avant que je puisse vous dire que ce n'est pas particulièrement facile. Ce que vous devez faire est fourni sur un événement OnMouseDown/OnMouseMove/OnMouseUp au formulaire lui-même (ou un contrôle dans le formulaire) qui met à jour la position du contrôle lorsque l'utilisateur clique et fait glisser. À ma connaissance, il n'y a pas de contrôle intégré qui vous permettra de cliquer et de faire glisser une fenêtre autre que le titre.

0

Si vous voulez créer une application à partir de zéro, je vous recommande de le créer en utilisant WPF. Todd Miranda a une superbe démonstration de la création d'une application semblable à un gadget sur windowsclient.net.

Lien vers la manifestation: http://windowsclient.net/learn/video.aspx?v=5177

3

J'ai écrit un composant à faire, vous pouvez le trouver here.

Il peut être utilisé pour déplacer n'importe quel contrôle, pas seulement une fenêtre. Vous pouvez l'utiliser explicitement dans le code, ou tout simplement le déposer sur la surface du concepteur et définir la propriété EnableDragMove sur la fenêtre ou le contrôle, comme indiqué ci-dessous:

Screenshot

+0

Ceci est une réponse plus complète merci. –

+0

J'aimerais pouvoir vous donner plus de 1 vote! –

Questions connexes