Есть ли какой-либо элемент управления, который может перемещать окно без строки заголовка (верхняя)/без рамки вообще.
Я делаю приложение для заметок, как вы знаете, поэтому я хочу, чтобы оно было компактным.
Есть ли какой-либо элемент управления, который может перемещать окно без строки заголовка (верхняя)/без рамки вообще.
Я делаю приложение для заметок, как вы знаете, поэтому я хочу, чтобы оно было компактным.
Вам нужно вернуть HTCAPTION из WM_NCHITTEST в вашем 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;
}
}
}
В этом случае клиентская область вашего окна будет казаться Windows полосой заголовка.
Для этого я написал компонент, вы можете найти его здесь.
Его можно использовать для перемещения любого элемента управления, а не только окна. Вы можете либо использовать его явно в коде, либо просто поместить его на поверхность конструктора и установить свойство EnableDragMove
в окне или элементе управления, как показано ниже:
(источник: thomaslevesque.com)
Попробовав что-то подобное, прежде чем я могу сказать вам, что это не особенно легко. Что вам нужно сделать, так это предоставить событие OnMouseDown/OnMouseMove/OnMouseUp самой форме (или некоторому элементу управления в форме), которое обновляет положение элемента управления, когда пользователь щелкает и перетаскивает. Насколько мне известно, нет встроенного элемента управления, который позволил бы вам щелкнуть и перетащить окно, отличное от заголовка.
Если вы собираетесь создавать приложение с нуля, я бы рекомендовал создавать его с помощью WPF.
У Тодда Миранды есть отличная демонстрация создания приложения, похожего на гаджет, на windowsclient.net.
Ссылка на демонстрацию: http://windowsclient.net/learn/video.aspx?v=5177