请选择 进入手机版 | 继续访问电脑版

我爱科技论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 294|回复: 0

[技术分享] 【C#进阶】如何实现一个C#中的Windows Form窗体不能拖动(鼠标不能移动)

[复制链接]

696

主题

743

帖子

7158

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
7158

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

发表于 2018-4-15 18:55:40 | 显示全部楼层 |阅读模式
实现窗口不能拖动的方法主要有两种:
标题一 C# 中在显示标题栏的时候,禁止鼠标拖动窗体
标题二  C# 中屏蔽窗体的移动
实现这个功能需用到拦截系统消息的知识,拦截系统的消息有两种实现方式,在窗体中重写 WndProc(ref Message m)方法,还有就是创建一个新类或在现有的类中继承System.Windows.Forms.IMessageFilter 接口,并实现这个接口来实现拦截系统消息
方法一通过重写方法来实现
      const int WM_NCLBUTTONDOWN = 0x00A1;
      const int HTCAPTION = 2;
      protected override void WndProc(ref Message m)
      {
          if (m.Msg == WM_NCLBUTTONDOWN && m.WParam.ToInt32() == HTCAPTION)
             return;
          base.WndProc(ref m);
       }
方法二  通过继承接口来实现
  public class MessageFilter : System.Windows.Forms.IMessageFilter
    {
        const int WM_NCLBUTTONDOWN = 0x00A1;
        const int HTCAPTION = 2;


        public bool PreFilterMessage(ref System.Windows.Forms.Message m)
        {
            if (m.Msg == WM_NCLBUTTONDOWN && m.WParam.ToInt32() == HTCAPTION)
                return true;
            return false;
        }
    }


  创建完这个类后,创建一个对象,并把该对象添加到应用程序里边,如下列代码,下列代码是Program文件当中的入口方法
  static class Program
    {
        private static MessageFilter filter = new MessageFilter();
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.AddMessageFilter(filter);
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainFrm());
        }
    }  






上一篇:【C#进阶】C#实现Excel文件读取的工具类封装
下一篇:Matlab在图像处理中的应用编程笔记分享
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案; 如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

微信扫一扫

快速回复 返回顶部 返回列表