はじめに
前回は、フラットなWindows Formの作成(Borderess)を投稿しました、
しかし、前回のままだとWindowを移動することができません。
今回は、Header部分(パネル部分)を押下した状態で移動する方法の備忘録です。
前回の投稿は下記参照
[C#] Windows Formにてタイトルバーなしのフラットなおしゃれフォームを作成する方法
IMessegeFilterを利用する
では早速ごりごり書いていきたいと思います。
ドラッグ対象の「Panel」に名前を付けます(ここでは「pnl_header」としました。
public pertial class Form1 : Form, IMessageFilter
{
public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;
public const int WM_LBUTTONDOWN = 0x0201;
private HashSet controlsToMove = new HashSet();
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern bool ReleaseCapture();
public Form1()
{
Application.AddMessageFilter(this);
controlsToMove.Add(this.pnl_Header);
}
public bool PreFilterMessage(ref Message m) {
if (m.Msg == WM_LBUTTONDOWN && controlsToMove.Contains(Control.FromHandle(m.HWod)))
{
ReleaseCapture();
SendMessage(this.Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
return true
}
return false;
}
}
上記で、移動させることができました。
最後に
移動するところまでの備忘録を投稿しました。
是非、試してみてください。