代码之家  ›  专栏  ›  技术社区  ›  Martin Plante

如何在.NET Compact Framework上通过代码最小化表单

  •  5
  • Martin Plante  · 技术社区  · 16 年前

    在.NET Compact Framework下,没有FormWindowsState.Minimize值。如何最小化应用程序,使其保持活动和可用,但将焦点返回到以前的应用程序?

    4 回复  |  直到 16 年前
        2
  •  1
  •   Joel Coehoorn    16 年前

    过时-但在当时,这是单击 X

        3
  •  0
  •   ctacke    16 年前

    在活动窗体上调用Hide()。

        4
  •  0
  •   Jason Morse    15 年前

    在我们的场景中,我们的表单需要占据整个屏幕(包括隐藏任务栏),没有标题栏,能够通过代码最小化,当最小化时,它将在任务栏中显示应用程序图标(以便可以恢复),从而将焦点放在应用程序堆栈上的上一个程序上。这听起来并不太糟糕,但实际上我不能同时满足所有的要求,这需要一些技巧。

    正如其他人所发布的,紧凑框架中没有Form.Minimize()。

    • Form.Hide() ShowWindow(Form.Handle, 6) ,其中6=SW_MINIMIZE,将最小化任务栏上的应用程序,但仅当 Form.FormBorderStyle = Normal
    • 我需要设置 Form.WindowState = Normal 当应用程序最小化时,它会立即恢复,而不是最大化。

    最后,我把以下几点放在一起,以得到我想要的。它涉及到通过填充屏幕和一些额外的高度来手动设置应用程序大小,以便我可以向上倾斜应用程序,并将标题栏移出可视屏幕。

    public class MyForm 
    {
      public MyForm()
      {
         InitializeComponent();
    
         NativeMethods.HideTaskbar();
         FormBorderStyle = FormBorderStyle.FixedSingle;
         WindowState = FormWindowState.Normal;
         Rectangle screenBounds = Screen.PrimaryScreen.Bounds;
         int taskBarHeight = SystemInformation.MenuHeight;
         NativeMethods.MoveWindow(Handle, 
                                  0, -taskBarHeight, 
                                  screenBounds.Width, screenBounds.Height + taskBarHeight);
      }
    
      public void HandleMinimize()
      {
        NativeMethods.ShowTaskBar();
        NativeMethods.ShowWindow(Handle, WindowShowStyle.Minimize);
      }
    

    截取应用程序还原事件以隐藏任务栏要复杂得多,因为原始作者没有提到任务栏,所以我将不讨论它。

    所有静态NativeMethods类方法都是P/Invoke语句的包装器。请参阅中的coredll部分 http://www.pinvoke.net