Как можно минимизировать форму с помощью кода на .NET Compact Framework - PullRequest
5 голосов
/ 14 марта 2009

В .NET Compact Framework отсутствует значение FormWindowState.Minimize. Как я могу свернуть свое приложение, чтобы оно оставалось активным и доступным, но возвращало фокус предыдущему приложению?

Ответы [ 4 ]

5 голосов
/ 14 мая 2009
1 голос
/ 14 марта 2009

Прошло много времени с тех пор, как я использовал Windows Mobile & mdash; тогда он еще назывался pocketpc 2002, так что это может быть путь устаревший & mdash; но в то время это было поведение по умолчанию для нажатия X в правом верхнем углу приложения. Вместо закрытия приложение будет отправлено в фоновом режиме. Я так понимаю, что изменилось?

0 голосов
/ 05 января 2010

Я занимаюсь разработкой универсального WinCE (4.2 и 5.0), поэтому не уверен, что мое решение подойдет для вашей проблемы с Windows Mobile.

В нашем сценарии наша форма должна была занимать весь экран (включая скрытие панели задач), не иметь строки заголовка, возможности минимизировать с помощью кода, а при сворачивании она отображала значок приложения на панели задач (так что это восстановлено) выделение предыдущей программы в стеке приложений. Звучит не так уж и плохо, но на практике я не смог удовлетворить все требования одновременно, потребовал некоторой хитрости.

Как уже сообщали другие, на компактной платформе нет Form.Minimize ().

  • Form.Hide() не дал мне способа восстановить приложение. P / Invoking ShowWindow(Form.Handle, 6), где 6 = SW_MINIMIZE, минимизирует приложение до панели задач, но только когда Form.FormBorderStyle = Normal (вместо None), однако это покажет строку заголовка приложения.
  • Мне нужно было установить Form.WindowState = Normal вместо Maximized, иначе, когда приложение было свернуто, оно немедленно восстановилось.

В конце концов я собрал следующее, чтобы получить то, что я хотел. Это включало ручную настройку размера приложения, заполняя экран И дополнительной высотой, чтобы я мог наклонить приложение вверх и убрать заголовок с видимого экрана.

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. Обратитесь к разделу coredll в http://www.pinvoke.net для получения дополнительной информации об их реализации.

0 голосов
/ 14 марта 2009

Позвоните Скрыть () в вашей активной форме.

...