就是单击窗体左上角的图标会显示一个系统菜单,双击则会关闭窗体,这两个功能都不需要,想做成其它功能,得调Api吧,哪位高手知道?

解决方案 »

  1.   

    T通过API实现
    参考
    http://www.cnblogs.com/anderslly/archive/2008/07/09/617153.html
      

  2.   


    protected override CreateParams CreateParams
        {
            get
            {
                int CS_NOCLOSE = 0x200;
                CreateParams parameters = base.CreateParams;
                parameters.ClassStyle |= CS_NOCLOSE;            return parameters;
            }
        }
      

  3.   

    public partial class NoCloseForm : Form
    {
        /**//// <summary>
        /// 获取已设置无法关闭窗口创建参数。
        /// </summary>
        protected override CreateParams CreateParams
        {
            get
            {
                int CS_NOCLOSE = 0x200;
                CreateParams parameters = base.CreateParams;
                parameters.ClassStyle |= CS_NOCLOSE;            return parameters;
            }
        }
    }
    这个还可以!看看,嘿嘿
      

  4.   

    调用API的话要控制一下,要不然你最小化窗体后,再打开,那个关闭按钮就又可以用了
    上面这个代码是可以直接使用的
      

  5.   

    谢谢大家
    使用上面代码后窗体不能关闭了!
    我只是要左边图标双击时不关闭,有办法吗?我现在能通过api获取双击标题栏的事件(估且称为事件吧),能获取双击图标的吗?
      

  6.   

    或者换一个思路,让左边的图标消失(不是设为透明按钮,那样还是能双击关闭),然后在双击标题栏时获取鼠标位置。其实我想要的效果就是:
    1:右边的关闭按钮是一定要要的 
    2:双击标题栏折叠窗口(已经实现)
    3:双击窗体图标最大化窗口(问题所在)好像把边框类型设为toolWindow可以隐藏图标,但那个标题栏太小了,惨不忍睹
      

  7.   

    重载函数
      protected override void OnFormClosing(FormClosingEventArgs e)
            {
              //判断鼠标的坐标如果在左上角
                //就执行 e.Cancel = true;
              //和其他的实现其他功能;
               //如果在右上角就就关闭窗体
            }
      

  8.   

    拦截系统菜单using System;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    namespace WindowsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();            
            }
            [DllImport("user32.dll")]
            private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
            protected override void WndProc(ref   Message m)
            {
                if (m.Msg == 0x112)
                {
                    if (m.WParam.ToInt32() == 61539 || m.WParam.ToInt32() == 61587)
                    {
                        Console.WriteLine(m.WParam);
                        return;
                    }
                }
                base.WndProc(ref   m);
            }  
        }
    }
      

  9.   

    JJ从D转C真是借着东风放火啊!