none
WinForm中,如何去掉最大化按钮,而保留最小化和关闭按钮 RRS feed

  • Pergunta

  • WinForm中,如何去掉最大化按钮,而保留最小化和关闭按钮
    在Winform中设置 
    this.ControlBox = true ;
     this.MaximizeBox = false;
    只是将最大化按钮只是不能使用,但是还要灰色显示
    segunda-feira, 8 de fevereiro de 2010 03:35

Respostas

  • 你好!

    你这样的需求是不能直接实现的,你可以将 FormBorderStyle 设置为 NONE 后自己设计你想要的标题栏,这样你可能会付出更多的时间。建议保留默认的方式就好了。

    知识改变命运,奋斗成就人生!
    • Marcado como Resposta KeFang Chen sexta-feira, 12 de fevereiro de 2010 03:17
    segunda-feira, 8 de fevereiro de 2010 03:41
    Moderador
  • 像你这样的需求,想使最大化不可见,你只能去掉原先的标题栏,自己制作一个标题栏了


    努力+方法=成功
    • Marcado como Resposta KeFang Chen sexta-feira, 12 de fevereiro de 2010 03:17
    segunda-feira, 8 de fevereiro de 2010 03:55
  • 补充一下,刚才试验了一下,得到的 Maximize Button 的 Handle 和 TitleBar 的 Handle 是相同的。也就是不能利用 ShowWindow 的方法隐藏最大化按钮。如果这样做,整个窗口都会被隐藏。

    可以参考一下两个方法实现。

    1、用 SetWindowLong(GWL_STYLE, GetWindowLong(GWL_STYLE) ~| WS_MAXBOX),可以 Work。参考:http://social.msdn.microsoft.com/forums/en-US/wpf/thread/d74820db-a002-4d4e-b96e-02d29dc4a119
    2、用 MSAA,参考 http://msdn.microsoft.com/en-us/library/ee671653(VS.85).aspx

    Mark Zhou
    WinForm中,如何去掉最大化按钮,而保留最小化和关闭按钮
    在Winform中设置 
    this.ControlBox = true ;
     this.MaximizeBox = false;
    只是将最大化按钮只是不能使用,但是还要灰色显示


    楼主的意思是直接干掉,不显示。 用SetWindowLong 替换Style 地方法只能是禁用最大化,但是不能让Windows 不画。
    所以,最好的办法还是得干掉默认的Title bar 然后自己做一个Title bar。
    • Marcado como Resposta KeFang Chen sexta-feira, 12 de fevereiro de 2010 03:17
    terça-feira, 9 de fevereiro de 2010 12:07

Todas as Respostas

  • 你好!

    你这样的需求是不能直接实现的,你可以将 FormBorderStyle 设置为 NONE 后自己设计你想要的标题栏,这样你可能会付出更多的时间。建议保留默认的方式就好了。

    知识改变命运,奋斗成就人生!
    • Marcado como Resposta KeFang Chen sexta-feira, 12 de fevereiro de 2010 03:17
    segunda-feira, 8 de fevereiro de 2010 03:41
    Moderador
  • 像你这样的需求,想使最大化不可见,你只能去掉原先的标题栏,自己制作一个标题栏了


    努力+方法=成功
    • Marcado como Resposta KeFang Chen sexta-feira, 12 de fevereiro de 2010 03:17
    segunda-feira, 8 de fevereiro de 2010 03:55
  • 你好!

    你这样的需求是不能直接实现的,你可以将 FormBorderStyle 设置为 NONE 后自己设计你想要的标题栏,这样你可能会付出更多的时间。建议保留默认的方式就好了。

    知识改变命运,奋斗成就人生!

    同意,这是正路!!!
    segunda-feira, 8 de fevereiro de 2010 04:18
  • 你好!
         过去我也尝试过建立这样的窗体,但是都没有成功,Windows在底层就没有提供这样的窗体样式,所以要实现只能自己重新绘制标题栏了!
    周雪峰
    segunda-feira, 8 de fevereiro de 2010 07:23
    Moderador
  • 办法还是有的。你先得到需要操作的窗体的 Handle,然后用 EnumChildWindows 得到它的标题栏上的所有窗口,然后判断其 Class Name 是不是 Button 以及 GetWindowText() 是不是 Mamimize,如果是,用 ShowWindow(SW_HIDE) 函数隐藏就可以了。

    最好的方法可以用 Spy++ 试试看就知道了。

    不过我不建议这么做,尽量使用 Windows 提供的标准标题栏样式。
    Mark Zhou
    segunda-feira, 8 de fevereiro de 2010 10:20
  • 办法还是有的。你先得到需要操作的窗体的 Handle,然后用 EnumChildWindows 得到它的标题栏上的所有窗口,然后判断其 Class Name 是不是 Button 以及 GetWindowText() 是不是 Mamimize,如果是,用 ShowWindow(SW_HIDE) 函数隐藏就可以了。

    最好的方法可以用 Spy++ 试试看就知道了。

    不过我不建议这么做,尽量使用 Windows 提供的标准标题栏样式。
    Mark Zhou
    只要是标准的窗口, TitleBar 就是Windows 直接画上去的, 根本就不是窗体, 也不可能有独立的Handle。 回帖子的时候自己没试试吧?
    segunda-feira, 8 de fevereiro de 2010 11:52
  • 办法还是有的。你先得到需要操作的窗体的 Handle,然后用 EnumChildWindows 得到它的标题栏上的所有窗口,然后判断其 Class Name 是不是 Button 以及 GetWindowText() 是不是 Mamimize,如果是,用 ShowWindow(SW_HIDE) 函数隐藏就可以了。

    最好的方法可以用 Spy++ 试试看就知道了。

    不过我不建议这么做,尽量使用 Windows 提供的标准标题栏样式。
    Mark Zhou
    只要是标准的窗口, TitleBar 就是Windows 直接画上去的, 根本就不是窗体, 也不可能有独立的Handle。 回帖子的时候自己没试试吧?

    不是的。

    并不是只有窗口 (Form) 才有 Handle,标题栏那一行当然有 Handle,并且从左到右可以得到图标、标题栏文字、帮助、最小化、还原和关闭按钮的 Handle。

    例如 Skype 的标题栏就是有自定义图标和最大化按钮的,自己去看看找个 Spy++ 或 Mitaspy 看看就知道了。有 Automation 经验的 SDET 们一定知道所有的标题栏控件都有 Handle 的,要么用 MSAA 要么用 Window API 一定能得到。

    在技术类论坛中发帖时建议不要使用“不可能”之类的确定性词语,如果没有十足的把握。

    Mark Zhou
    terça-feira, 9 de fevereiro de 2010 08:59
  • 补充一下,刚才试验了一下,得到的 Maximize Button 的 Handle 和 TitleBar 的 Handle 是相同的。也就是不能利用 ShowWindow 的方法隐藏最大化按钮。如果这样做,整个窗口都会被隐藏。

    可以参考一下两个方法实现。

    1、用 SetWindowLong(GWL_STYLE, GetWindowLong(GWL_STYLE) ~| WS_MAXBOX),可以 Work。参考:http://social.msdn.microsoft.com/forums/en-US/wpf/thread/d74820db-a002-4d4e-b96e-02d29dc4a119
    2、用 MSAA,参考 http://msdn.microsoft.com/en-us/library/ee671653(VS.85).aspx

    Mark Zhou
    terça-feira, 9 de fevereiro de 2010 09:42
  • 你上一个帖子之后,我还专门看过。spy++ 是没法把最大化、最小化、关闭抓出来的。是我没有表述清楚,应该这么说。最大化、最小化、关闭 这三部分是Windows 自己画的。不具有单独的句柄。

    terça-feira, 9 de fevereiro de 2010 11:53
  • 补充一下,刚才试验了一下,得到的 Maximize Button 的 Handle 和 TitleBar 的 Handle 是相同的。也就是不能利用 ShowWindow 的方法隐藏最大化按钮。如果这样做,整个窗口都会被隐藏。

    可以参考一下两个方法实现。

    1、用 SetWindowLong(GWL_STYLE, GetWindowLong(GWL_STYLE) ~| WS_MAXBOX),可以 Work。参考:http://social.msdn.microsoft.com/forums/en-US/wpf/thread/d74820db-a002-4d4e-b96e-02d29dc4a119
    2、用 MSAA,参考 http://msdn.microsoft.com/en-us/library/ee671653(VS.85).aspx

    Mark Zhou
    WinForm中,如何去掉最大化按钮,而保留最小化和关闭按钮
    在Winform中设置 
    this.ControlBox = true ;
     this.MaximizeBox = false;
    只是将最大化按钮只是不能使用,但是还要灰色显示


    楼主的意思是直接干掉,不显示。 用SetWindowLong 替换Style 地方法只能是禁用最大化,但是不能让Windows 不画。
    所以,最好的办法还是得干掉默认的Title bar 然后自己做一个Title bar。
    • Marcado como Resposta KeFang Chen sexta-feira, 12 de fevereiro de 2010 03:17
    terça-feira, 9 de fevereiro de 2010 12:07
  • 补充一下,刚才试验了一下,得到的 Maximize Button 的 Handle 和 TitleBar 的 Handle 是相同的。也就是不能利用 ShowWindow 的方法隐藏最大化按钮。如果这样做,整个窗口都会被隐藏。

    可以参考一下两个方法实现。

    1、用 SetWindowLong(GWL_STYLE, GetWindowLong(GWL_STYLE) ~| WS_MAXBOX),可以 Work。参考:http://social.msdn.microsoft.com/forums/en-US/wpf/thread/d74820db-a002-4d4e-b96e-02d29dc4a119
    2、用 MSAA,参考 http://msdn.microsoft.com/en-us/library/ee671653(VS.85).aspx

    Mark Zhou
          SetWindowLong(GWL_STYLE, GetWindowLong(GWL_STYLE) ~| WS_MAXBOX) 这个方法可以吗? 我试过不行呢。

    前无古人,后无来者

    quarta-feira, 27 de março de 2019 02:30
  • 标准的Winform窗体不支持将最大化和最小化按钮隐藏,

    可以通过设置Form的FormBorderStyle=None, 然后自定义一个Header的Panel,在Panel上增加最小化和关闭按钮。


    ericzhou

    sexta-feira, 29 de março de 2019 01:49