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

时间:2009-03-13 21:03:21

标签: .net compact-framework

在.NET Compact Framework下,没有FormWindowState.Minimize值。如何最小化我的应用程序,使其保持活动状态并可用,但是将重点放在以前的应用程序上?

4 个答案:

答案 0 :(得分:5)

答案 1 :(得分:1)

自从我使用Windows mobile已经有一段时间了 - 当时它仍然被称为pocketpc 2002,所以这可能是方式已过时 - 但那时这是默认行为点击应用右上角的X。应用程序将被发送到后台,而不是关闭。我认为它改变了吗?

答案 2 :(得分:0)

在您的有效表单上调用隐藏()。

答案 3 :(得分:0)

我正在开发通用WinCE(4.2和5.0),因此我不确定我的解决方案是否适用于您的Windows Mobile问题。

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

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

  • Form.Hide()让我无法恢复该应用。 P /调用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语句的包装器。有关实施这些内容的更多信息,请参阅http://www.pinvoke.net中的coredll部分。