这个方法是用来处理消息的,包括鼠标的各种消息。前一种方法中讲到了非客户区的鼠标消息,但我在msdn里找了半天,没找到相关的非客户区的鼠标事件。但WndProc里可以处理。原理:将鼠标在客户区按下的消息更改为在非客户区的标题栏按下。        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                case 0x0201://鼠标左键按下的消息
                    m.Msg = 0x00A1;//更改消息为非客户区按下鼠标
                    m.LParam = IntPtr.Zero;//默认值
                    m.WParam = new IntPtr(2);//鼠标放在标题栏内
                    break;
            }
            base.WndProc(ref m);
        }这个重写一下就行了

解决方案 »

  1.   

    可以参考下面的代码:[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
    public static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
    [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
    public static extern bool RemoveMenu(IntPtr hMenu, int uPosition, int uFlags);
    IntPtr hMenu;
    hMenu = GetSystemMenu(this.Handle, false);
    RemoveMenu(hMenu, SC_MOVE, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);   //移动菜单
      

  2.   

    上面用的到常数如下:
    public const int MF_BYCOMMAND = 0x00000000;
    public const int MF_DISABLED = 0x00000002;
    public const int MF_GRAYED = 0x00000001;
      

  3.   

    哎,漏了一下主要的:
    public const int SC_MOVE = 0xf010;
      

  4.   

    第一个问题1楼的兄弟搞定了其实还可以继承form.改写他的OnMouseHover也可以.2\如何让一个form2   始终显示在form1的上面   ,若不关闭form2   则不能对form1作任何操作. 
            private void Pop()
            {
                Form frm2 = new Form();
                frm2.Text = ".....";
                //其他初始化操作
                frm2.ShowDialog();
            }
    frm2就始终再上面了~模式窗体
      

  5.   

    同意楼上的说法,lz的描述几乎就是模态对话框的定义了。
    当然可能还需要检查一下 DialogResult。
    ...
        if (DialogResult.OK == frm1.ShowDialog())
        {
            ...
      

  6.   


    frm2.ShowDialog(); 
     用这种方式显示,其它窗体就不能动了,模式对话框与非模式对话框的问题
      

  7.   

    frm2.ShowDialog();   这样的方式的确可让form2 显示在form1的前面,可能是我的意思描述不够清楚,
    我的form1 和form2都不是全屏显示的, 在运行程序后 我用鼠标点击桌面空白区域,在form1 form2就会在任务最小化  我的要求是无论鼠标点什么地方 这个窗口都不变化(不让它最小化,始终显示在屏幕上),除非我执行 this.hide();或其他退出命令
      

  8.   

      6楼建议的 Form.TopMost 可以保证你的窗口总在其他窗口上方。
      阻止用户最小化窗体,可以使用3楼的方法,从系统菜单中移去最小化菜单项(也会导致窗体右上角相应按钮实效),也可设置 Form.MinimizeBox = false; 从而禁用窗体右上角最小化按钮及系统菜单中的最小化菜单项。
      但是“显示桌面”可以让所有窗体最小化,这个似乎阻止不了,但应该可以通过在合适的时机设置 Form.WindowState = FormWindowState.Normal; 来解决。
      因为不熟悉 Windows API,未能提供 P/Invoke 的解决办法,上述办法都是可以在窗体设计器中做到的,简单方便有余,能不能满足要求就难说了。
      

  9.   

    1.窗体有一个属性,可以不显示标题栏,这样就移动不了了.
    2.用模式窗体(ShowDialog方法)