如何检测我的 Compact Framework 应用程序何时被智能最小化(智能最小化是当用户单击 Pocket PC 右上角的“X”按钮时发生的情况)?

Deactivate 事件不是正确的方式,因为它发生在最小化以外的情况下,例如当消息框或其他窗体显示在主窗体顶部时。而且窗体的 WindowState 没有帮助,因为 .NET CF 上没有“最小化”WindowState。

我听说通过设置 MinimizeBox = false,我的应用程序将被关闭而不是最小化。但我实际上不想关闭我的应用程序,我只是想知道它何时被最小化。

有帮助吗?

解决方案

我认为这里的方法是处理 WM_ACTIVE 消息,然后检查 fMinimized 参数是否不为零。您可以在以下位置找到有关如何在代码中声明此消息的更多信息: 这里.

我将尝试找出如何在 C# 中准确编码并证明这个假设。不过你可能比我更快地弄清楚。

还要检查功能 定义窗口过程窗口过程, ,用于处理消息。函数在代码中声明如下:

首先有包括:

using System.Runtime.InteropServices;

然后在类中这样声明

[DllImport("coredll.dll")]
static extern IntPtr DefWindowProc(IntPtr hWnd, uint uMsg, UIntPtr wParam,
   IntPtr lParam);

您还可以做另一件事,这更像是一种“哲学”解决方法。INMO 智能最小化 X 会让用户感到困惑,这就是为什么我不喜欢包含它。相反,我在表单的右下角提供了一个按钮,显示“关闭”或“返回”,它使用表单的 close 方法。我以各种形式使用它来保持标准。这对于 Windows 用户来说不太含糊,因为他们可能会认为 Windows Mobile 中的 X 与 Windows PC 中的 X 相同。

如果由于某种原因您需要最小化您的应用程序或将其发送到后台,请使用以下代码:

using System.Runtime.InteropServices;
...

public partial class Main : Form
{
   public Main()
    {


        InitializeComponent();
    }

  [DllImport("coredll.dll")]
    static extern int ShowWindow(IntPtr hWnd, int nCmdShow);

  const int SW_MINIMIZED = 6;

  ...
  ...

   public void HideForm()
    {
        ShowWindow(this.Handle, SW_MINIMIZED);
    }
} 

其他提示

究竟你聪明的最小化是什么意思?我想你的意思是你的应用程序正在对一段时间内没有活动自动最小化?好吧,我不认为有该事件。

博客点用途的作者Deactivate事件用于打开和关闭内部过程。这是动画和其他类似的过程和消息框或另一种形式弹出的情况下,可接受的是没有问题。但是,如果你的进程不能,除非应用程序关闭或“智能最小化”停下来,你可以尝试开始上停用事件的计时器。如果窗体未激活回为特定的时间间隔,那么这将是安全的停止内部过程。

当然,在设计解决方案,你需要采取电源管理纳入考虑中。看看和当然也OpenNetCF用于功率的通知。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top