Реализовал перетаскивание формы за тело при помощи WinAPI:
public partial class FormMain : Form
{
[DllImport("user32", CharSet = CharSet.Auto)]
internal extern static bool PostMessage(IntPtr hWnd, uint Msg, uint WParam, uint LParam);
[DllImport("user32", CharSet = CharSet.Auto)]
internal extern static bool ReleaseCapture();
const uint WM_SYSCOMMAND = 0x0112;
const uint DOMOVE = 0xF012;
const uint DOSIZE = 0xF008;
public FormMain()
{
InitializeComponent();
}
private void FormMain_MouseDown(object sender, MouseEventArgs e)
{
ReleaseCapture();
PostMessage(this.Handle, WM_SYSCOMMAND, DOMOVE, 0);
}
}
при анализе кода получил 2 предупреждения:
Как правильно реализовать класс NativeMethods ?
Решено, спасибо Uranus
public partial class FormMain : Form
{
public static class NativeMethods
{
[DllImport("user32", CharSet = CharSet.Auto)]
internal extern static bool PostMessage(IntPtr hWnd, uint Msg, uint WParam, uint LParam);
[DllImport("user32", CharSet = CharSet.Auto)]
internal extern static bool ReleaseCapture();
}
const uint WM_SYSCOMMAND = 0x0112;
const uint DOMOVE = 0xF012;
const uint DOSIZE = 0xF008;
public FormMain()
{
InitializeComponent();
}
private void FormMain_MouseDown(object sender, MouseEventArgs e)
{
NativeMethods.ReleaseCapture();
NativeMethods.PostMessage(this.Handle, WM_SYSCOMMAND, DOMOVE, DOSIZE);
}
}
Помогите с устранением CA1901 реализацией констант для UintPtr, спасибо. Спустя несколько часов, начинаю думать, что ошибка в студии а не в моём коде.
Предупреждение CA1901 Как объявлено в вашем коде, параметр 'Msg' для P/Invoke 'FormMain.NativeMethods.PostMessage(IntPtr, UIntPtr, UIntPtr, UIntPtr)' будет иметь размер 8 байт для 64-разрядных платформ. Это неправильно, поскольку текущее объявление в машинном коде для данного API указывает, что его размер должен быть 4 байт для 64-разрядных платформ. Обратитесь к документации MSDN Platform SDK и выясните, какой тип данных следует использовать вместо 'UIntPtr'.
Это замкнутый круг ? или всё-же есть панацея, по прежнему прошу помочь.
Нужно было сделать приведение типов uint к IntPtr.
public static class NativeMethods
{
[DllImport("user32", CharSet = CharSet.Auto)]
internal extern static bool PostMessage(IntPtr hWnd, uint Msg, IntPtr WParam, IntPtr LParam);
[DllImport("user32", CharSet = CharSet.Auto)]
internal extern static bool ReleaseCapture();
}
const uint WM_SYSCOMMAND = 0x0112;
const uint DOMOVE = 0xF012;
const uint DOSIZE = 0xF008;
private void FormMain_MouseDown(object sender, MouseEventArgs e)
{
NativeMethods.ReleaseCapture();
NativeMethods.PostMessage(this.Handle, WM_SYSCOMMAND, (IntPtr)DOMOVE, (IntPtr)0);
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Изучая LINQ-запросы, надумал себе следующую задачку: "Необходимо написать программу, которая будет группировать студентов по их возрасту, а потом...
Как можно вывести список сетей, уровень их сигнала, и подключиться к сети через netsh c#?