天天看點

c# winform移動無邊框窗體

winform中移動無邊框窗體隻需要重寫

WndProc

方法即可,一下為實作代碼:

const

int

HTLEFT = 10;

const

int

HTRIGHT = 11;

const

int

HTTOP = 12;

const

int

HTTOPLEFT = 13;

const

int

HTTOPRIGHT = 14;

const

int

HTBOTTOM = 15;

const

int

HTBOTTOMLEFT = 0x10;

const

int

HTBOTTOMRIGHT = 17;

protected

override

void

WndProc(

ref

Message m)

{

switch

(m.Msg)

{

case

0x0084:

base

.WndProc(

ref

m);

Point vPoint = 

new

Point((

int

)m.LParam & 0xFFFF,

(

int

)m.LParam >> 16 & 0xFFFF);

vPoint = PointToClient(vPoint);

if

(vPoint.X <= 5)

if

(vPoint.Y <= 5)

m.Result = (IntPtr)HTTOPLEFT;

else

if

(vPoint.Y >= ClientSize.Height - 5)

m.Result = (IntPtr)HTBOTTOMLEFT;

else

m.Result = (IntPtr)HTLEFT;

else

if

(vPoint.X >= ClientSize.Width - 5)

if

(vPoint.Y <= 5)

m.Result = (IntPtr)HTTOPRIGHT;

else

if

(vPoint.Y >= ClientSize.Height - 5)

m.Result = (IntPtr)HTBOTTOMRIGHT;

else

m.Result = (IntPtr)HTRIGHT;

else

if

(vPoint.Y <= 5)

m.Result = (IntPtr)HTTOP;

else

if

(vPoint.Y >= ClientSize.Height - 5)

m.Result = (IntPtr)HTBOTTOM;

break

;

case

0x0201:

//滑鼠左鍵按下的消息 

m.Msg = 0x00A1;

//更改消息為非客戶區按下滑鼠 

m.LParam = IntPtr.Zero;

//預設值 

m.WParam = 

new

IntPtr(2);

//滑鼠放在标題欄内 

base

.WndProc(

ref

m);

break

default

:

base

.WndProc(

ref

m);

break

;

}

}

繼續閱讀