天天看点

C# 系统应用之无标题窗体移动的两种方法

在做项目界面设计中,常常为了美观需要设置窗体属性"formborderstyle"(窗体边框和标题栏外观)为none无标题窗口.此时隐藏标题的窗口怎样实现移动呢?我根据自己的项目从自己完成的两种方法进行讲解.

第一种方法我采用常用的根据mousedown、mousemove、mouseup、mouseleave事件中鼠标移动的距离,窗体坐标也跟着移动的方法.具体代码如下:

同时有的设置变量point formpoint通过offset和location变换位置亦类似.但是第一种方法可能由于每次获取鼠标坐标,移动时如果鼠标不在窗口位置会产生窗体总是向屏幕外移动的现象,因此推荐第二种调用api函数的方法.

sendmessage(

intptr hwnd,   //要接收消息的那个窗口的句柄

int wmsg,       //消息的标识符

int wparam,   //具体取决于发送的消息

int lparam      //具体取决于发送的消息

)

其中调用api函数需要引用命名空间system.runtime.interopservices.代码中wm_syscommand常量代表要向窗口发送消息,sc_move常代表要向窗口发送移动的消息.代码如下:

其中,emsecure是对话框form,当鼠标点击到图片或控件panel时不会响应移动,所以对需要移动的控件也响应该api函数即可.如我的程序界面panel1位于窗体顶部,故也响应该移动事件,即panel1_mousedown(object sender, mouseeventargs e).运行结果如下图所示,红色部分可以实现移动(顶部为panel控件):

C# 系统应用之无标题窗体移动的两种方法

提示如果是wpf可以响应window_mouseleftbuttondown(object sender, mousebuttoneventargs e){this.dragmove();}实现窗体移动.最后希望该文章对大家有所帮助,如果有错误或不足之处,请海涵.

继续阅读