再谈winform无边框窗体的鼠标托动与缩放

在winform经常用到无边框的窗体,原因就是想使自己的程序界面完全的自定义,网上也有过不少的相关资料

今天我发了一下的午的时间整理了一下.觉得还不错,贴出来看看.

为了提高托动的缩放的效率,减少系统开销,一般软件都用支持只显示窗体四周的虚线的方法,这也是windows默认的设置

首先看下其它软件的窗体托动,先说QQ2009吧,QQ2009的主窗体在托动时如果在屏幕上来回快速托动,等停下来时你会发现,很有可能鼠标现在在窗体的位置已经不是按下的位置了.再说酷我音乐盒.鼠标在托动或缩放窗体时,如果鼠标移动到窗体的各边框上时,鼠标形状仍然会改变.而且就算系统设置设置成托动时显示窗体内容,在托动和缩放时也不会显示内容,仍然是虚线.此虚线遇到有些情况会很乱,比如在播放的动画的电影上时,因为直按用屏幕DC画的,而且放后破坏其它窗体的界面,其它的重画时,他就可能会不显示了下面介绍几种托动的方法

先说两种常用的,再补充说明

1.在mousemove,mousedown,mouseup三个事件的配合下来移动和缩放就不说了,代码多,效率低,一般初学者都能写出来.

2.就是用系统已经存在的方法,一般是重写窗口过程,和用sendmessage来骗系统.

重写回调函数的小例子

 protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                case WM_NCLBUTTONDBLCLK://WM_NCLBUTTONDBLCLK=163 <0xA3>拦截鼠标非客户区左键双击消息,决定窗体是否最大化显示
                    if (this.MaximizeBox)
                    {
                        base.WndProc(ref m);
                        this.Invalidate();
                    }
                    return;
           

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值