Pergunta

Existe algum controle que possa mover a janela sem a barra de título (top)/sem quadro.

Estou fazendo um aplicativo de anotação como você sabe, então quero que seja compacto.

Foi útil?

Solução

Você precisa devolver o HTCaption do WM_NCHITTEst no seu 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;
        }
    }
}

Isso fará com que a área do cliente da sua janela pareça para o Windows ser uma barra de legenda.

Outras dicas

Eu escrevi um componente para fazer isso, você pode encontrar aqui.

Pode ser usado para mover qualquer controle, não apenas uma janela. Você pode usá -lo explicitamente no código ou simplesmente soltá -lo na superfície do designer e definir o EnableDragMove Propriedade na janela ou controle, como mostrado abaixo:

Screenshot

Tendo tentado algo assim antes que eu possa dizer que não é particularmente fácil. O que você precisará fazer é fornecido em um evento OnMouseDown/OnMouseMove/OnMouseUp para o próprio formulário (ou algum controle no formulário) que atualiza a posição do controle quando o usuário clicar e arrasta. Que eu saiba, não há controle incorporado que permitirá que você clique e arraste uma janela diferente do título.

Se você for construir um aplicativo a partir do zero, eu recomendaria criá -lo usando o WPF.

Todd Miranda tem uma ótima demonstração de criar um aplicativo como aplicativo no WindowsClient.net.

Link para a demonstração: http://windowsclient.net/learn/video.aspx?v=5177

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top