Я думаю, что путь здесь заключается в обработке сообщения 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);
}
}