如题:
就是要去掉最大化按钮,儿不是只是单纯的不可用!如果重画窗体标题栏,请教如何重画!

解决方案 »

  1.   


    先做个标志
    RemoveMenu 
    GetSystemMenu 
      

  2.   

    form 的window style的属性中 maximizeBox 改为false
      

  3.   


    我也想到过用RemoveMenu()方法,不过我没有具体的实现过这个方法,可不可以贴上具体的实现代码呢?谢谢
      

  4.   

    自己重绘比较麻烦得在消息处理里面弄
    我一般用简单点的办法,使用radcontrol的radtitlebar 或devexpress的form,这两个东西都有自己的皮肤编辑器,直接把皮肤改掉就好了
      

  5.   


    form 的属性中 maximizeBox 改为false 最大化按钮就没了
      

  6.   

    MaximizeBox = false 不就可以啦吗
      

  7.   


    那么是不是需要重新画窗体标题栏的Menu呢?
      

  8.   

    楼主把FormBorderStyle=FormBorderStyle.None
    然后自己添加menu,最小化,最大化button键就好了
      

  9.   

    好像只能重绘。
    最简单的:
    去掉窗体的标题栏。
    再用PANEL做一个标题栏。想做成什么样子都行。
      

  10.   


    按照你的意思是,把原先的menu不显示,然后自己写menu上去么?也就是等于重新画menu了?
      

  11.   

    将窗口的FormBorderStyle设置为:none
    再用PANEL做一个标题栏。这是最简单的方法。
      

  12.   

    哦...
            private void Form1_SizeChanged(object sender, EventArgs e)
            {
                if (this.WindowState == FormWindowState.Minimized)
                {
                    this.ShowInTaskbar = false;
                    this.notifyIcon1.Visible = true;
                }            if (this.WindowState == FormWindowState.Maximized)
                    this.WindowState = FormWindowState.Normal;
            }
      

  13.   

    不需要你重写1.FormBorderStyle=FormBorderStyle.None 
    2.从工具箱拖一个menuStrip到窗体上,
    3.拖2个button到menu上,调整大小设置背景图案
    4.添加最小化,关闭的单击事件
      

  14.   


      [DllImport("USER32.DLL")]
        public static extern int GetSystemMenu(int hwnd, int bRevert);    [DllImport("USER32.DLL")]
        public static extern int RemoveMenu(int hMenu, int nPosition, int wFlags);    [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
        public static extern IntPtr GetActiveWindow();  
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern IntPtr SendMessage(HandleRef hWnd, int msg, int wParam, int lParam);
         const int MF_REMOVE = 0x1000;    const int SC_RESTORE = 0xF120; //还原
        const int SC_MOVE = 0xF010; //移动
        const int SC_SIZE = 0xF000; //大小
        const int SC_MINIMIZE = 0xF020; //最小化
        const int SC_MAXIMIZE = 0xF030; //最大化
        const int SC_CLOSE = 0xF060; //关闭  private void Form1_Load(object sender, EventArgs e)
        {
                  int hMenu;
            hMenu = GetSystemMenu(this.Handle.ToInt32(), 0);
            RemoveMenu(hMenu, SC_MAXIMIZE , MF_REMOVE);
          
        }
      

  15.   

    我以为用RemoveMenu和GetSystemMenu就行了,结果不行啊,再查查
      

  16.   

    private void Form1_Load(object sender, EventArgs e)
            {
                this.SetDesktopLocation(280, 200);
                MaximizeBox = false;
                MinimizeBox = false;
                //C#中去掉最大化与最小化的按钮
            }
      

  17.   

    SizableToolWindow类型改为FixedToolWindow或SizableToolWindow窗体样式
      

  18.   

    1 先把窗体做好,然后把标题栏截图 截你想要的
    2 FormBorderStyle=FormBorderStyle.None  不要标题栏
    3 放几个PictureBox  把图片放上去,再在picturebox的Click写代码 不跟那一样  只是鼠标不能拖动窗体了,要自己写鼠标拖动窗体的事件
      

  19.   

    form1.MaximizeBox = false;
    或者在Form属性框MaximizeBox中设置:False;
      

  20.   

    window style的属性中 maximizeBox 改为false
      

  21.   

    非常谢谢,不过我已经在题目中说明了,最去掉最大化,而留下最小化和关闭按钮,MaximizeBox 属性只能让最大化按钮被禁用,而不是去掉
      

  22.   

    这个方法还是要用到GetSystemMenu()方法和 RemoveMenu()方法,我试过这个方法了 好像不能去掉最大化按钮,只能让最大化按钮点击了,没效果而已
      

  23.   

    干脆,先弄成fixToolwindow,然后在tilte栏里加一个按钮,实现自己的消息就成了实际上本来上面都给了简单的方法了(将窗口的FormBorderStyle设置为:none 再用PANEL做一个标题栏 或者是radform,devexpressform)你偏要用api,Gdi+这种不容易实现的方式。星星们当然乐意做api,gdi+,那是表现技术和检测自己的水平,你不必啊,啥东西简单易用就用啥好了
      

  24.   

    要知道改变系统默认的是很难办的事情,因为他没有句柄(虽然看起来是3个按钮,但实际那三个东西根本就没有句柄,完全是gdi+和消息处理实现的)
      

  25.   

    form 的window style的属性中 maximizeBox 改为false
      

  26.   


    我现在也是用自己做菜单的方法,自己画菜单上去,然后自己写事件,这个是目前的实现
    当然,以学习为目的的话,如果有哪位高手能用API,GDI+来实现,希望能给出一个能够实现的代码实例