Winform自定义无边框窗体
源码参考
Winform自定义无边框窗体 - landptf - 博客园
本文提出原帖子中的BUG
Point vPoint = new Point((int)m.LParam & 0xFFFF, (int)m.LParam >> 16 & 0xFFFF);
这块的代码有bug,特别是当电脑有多个屏幕时,屏幕坐标可能出现负值,(int)m.LParam >> 16 & 0xFFFF 这段运算会导致丢失符号;应该修改为
int x = (short)(m.LParam.ToInt32() & 0xFFFF);
int y = (short)((m.LParam.ToInt32() >> 16) & 0xFFFF);
Point screenPoint = new Point(x, y);Point vPoint = screenPoint;
vPoint = this.PointToClient(screenPoint); // 转换成客户区坐标