【问题标题】:Pocket PC/Windows Mobile: How to detect smart minimizePocket PC/Windows Mobile:如何检测智能最小化
【发布时间】:2010-09-26 19:37:30
【问题描述】:

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

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

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

【问题讨论】:

    标签: .net windows-mobile compact-framework pocketpc minimize


    【解决方案1】:

    智能最小化究竟是什么意思?我想您的意思是您的应用程序在一段时间内没有活动时会自动最小化?好吧,我不认为有这样的活动。

    blog spot 的作者使用 Deactivate 事件来打开和关闭内部进程。这对于动画和其他类似的过程是可以接受的,并且弹出消息框或其他表单的情况没有问题。但是,如果除非应用程序关闭或“智能最小化”,否则您的进程不得停止,您可以尝试在停用事件上启动计时器。如果表单在特定时间间隔内没有被激活,那么停止内部进程是安全的。

    当然,在设计解决方案时,您需要考虑电源管理。看看this,当然还有 OpenNetCF 的电源通知。

    【讨论】:

    • 智能最小化是用户单击 Pocket PC 右上角的“X”按钮时发生的事情。一个相关的问题是如何检测用户启动另一个程序和弹出属于我的应用程序的对话框之间的区别(两者都会产生 Deactivate 事件)。
    【解决方案2】:

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

    我将尝试找出如何在 C# 中准确编码并证明假设。但是,您可能比我快并弄清楚。

    还要检查用于处理消息的函数DefWindowProcWindowProc。函数在您的代码中声明如下:

    首先包含:

    using System.Runtime.InteropServices;
    

    然后在类中这样声明

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

    您还可以做另一件事,这更像是一种“哲学”解决方法。 INMO 智能最小化 X 让用户感到困惑,这就是我不喜欢包含它的原因。相反,我在表单的右下角提供了一个按钮,上面写着“关闭”或“返回”,它使用表单的关闭方法。我以各种形式使用它来保持标准。这对 windows 用户来说不太含糊,因为他们可能会认为 windows mobile 中的 X 与 windows for 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);
        }
    } 
    

    【讨论】:

    • Compact Framework 不提供对普通WindowProc 方法的访问权限Forms,那么我该如何利用这个建议呢?还是我在这里遗漏了什么……
    猜你喜欢
    • 2011-03-27
    • 2011-01-13
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 2015-05-05
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多