Карманный ПК / Windows Mobile: как обнаружить смарт-минимизацию - PullRequest
7 голосов
/ 14 декабря 2008

Как определить, когда приложение Compact Framework минимизируется с помощью смарт-кода (интеллектуальное минимизация - это то, что происходит, когда пользователь нажимает кнопку «X» в правом верхнем углу на Pocket PC)?

Событие «Деактивировать» не является правильным способом, поскольку оно происходит в обстоятельствах, отличных от минимизации, например, когда окно сообщения или другая форма отображается поверх главной формы. И WindowState формы не помогает, потому что в .NET CF нет «свернутого» WindowState.

Я слышал, что, установив MinimizeBox = false, мое приложение будет закрыто, а не свернуто. Но на самом деле я не хочу, чтобы мое приложение закрывалось, я просто хочу знать, когда оно было свернуто.

Ответы [ 2 ]

5 голосов
/ 04 января 2009

Я думаю, что путь здесь заключается в обработке сообщения WM_ACTIVE и проверке, не равен ли параметр fMinimized нулю. Вы можете найти больше информации о том, как объявить это сообщение в вашем коде в здесь .

Я постараюсь выяснить, как именно кодировать это в C # и доказать гипотезу. Однако ты, может быть, быстрее меня и разберешься.

Также проверьте функции DefWindowProc и WindowProc , которые используются для обработки сообщений. Функции объявлены в вашем коде так:

Сначала включите:

using System.Runtime.InteropServices;

тогда в классе объявите вот так

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

Есть еще одна вещь, которую вы могли бы сделать, это скорее "философский" обходной путь. INMO умный минимизатор X сбивает с толку пользователей, поэтому я не люблю его включать. Вместо этого я предоставляю кнопку в правом нижнем углу формы с надписью «закрыть» или «назад», которая использует метод закрытия формы. Я использовал это во всех формах, чтобы держать стандарт. Это менее двусмысленно для пользователей Windows, поскольку они могут предположить, что X в Windows Mobile - это то же самое X в Windows для ПК.

Если по какой-то причине вам необходимо свернуть приложение или отправить его в фоновый режим, используйте следующий код:

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);
    }
} 
0 голосов
/ 15 декабря 2008

Что именно вы подразумеваете под умным минимизированным? Я полагаю, вы имеете в виду, что ваше приложение автоматически сворачивается в течение некоторого времени без активности? Ну, я не думаю, что для этого есть событие.

Автор этого блога использует событие Деактивировать для включения и выключения внутреннего процесса. Это приемлемо для анимации и других подобных процессов, и случаи появления окна сообщения или другой формы не представляют проблем. Однако, если ваш процесс не должен быть остановлен до тех пор, пока приложение не закроется или «минимизируется», вы можете попробовать запустить таймер при отключении событий. Если форма не активируется обратно в течение определенного интервала, тогда было бы безопасно остановить внутренний процесс.

Конечно, при разработке вашего решения вам необходимо учитывать управление питанием. Взгляните на this и, конечно же, на OpenNetCF для уведомлений о питании.

...