Карманный КОМПЬЮТЕР / Windows Mobile:Как обнаружить интеллектуальную минимизацию

StackOverflow https://stackoverflow.com/questions/365773

Вопрос

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

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

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

Это было полезно?

Решение

Я думаю, что правильный путь здесь - это обработка 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 smart minimize X сбивает с толку пользователей, вот почему я не люблю его включать.Вместо этого я предоставляю кнопку в правом нижнем углу формы с надписью "закрыть" или "назад", которая использует метод close формы.Я использовал его во всех формах, чтобы соблюсти стандарт.Это менее двусмысленно для пользователей 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);
    }
} 

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top