Myślę, że sposobem na przejście tutaj jest przetwarzanie komunikatu WM_ACTIVE, a następnie sprawdzenie, czy parametr fMinimized nie jest równy zero. Więcej informacji na temat deklarowania tego komunikatu w kodzie można znaleźć pod numerem here.
Postaram się dowiedzieć, jak dokładnie zakodować to w C# i udowodnić hipotezę. Jednak może jesteś szybszy ode mnie i zrozumiesz.
Sprawdź również funkcje DefWindowProc i WindowProc, które są używane do przetwarzania wiadomości. Funkcje są deklarowane w kodzie jak poniżej:
najpierw include:
using System.Runtime.InteropServices;
następnie w klasie deklarują się ten
[DllImport("coredll.dll")]
static extern IntPtr DefWindowProc(IntPtr hWnd, uint uMsg, UIntPtr wParam,
IntPtr lParam);
istnieje inna rzeczą, jaką można zrobić, jest to bardziej "filozoficzne" rozwiązanie. INMO smart minimize X jest mylące dla użytkowników, dlatego nie lubię tego włączać. Zamiast tego podaję przycisk w prawym dolnym rogu formularza, który mówi "zamknij" lub "powrót", który używa metody zamknięcia formularza. Użyłem go we wszystkich formach, aby zachować standard. Jest to mniej niejednoznaczne dla użytkowników systemu Windows, ponieważ mogą zakładać, że X w systemie Windows Mobile jest taki sam X w systemie Windows na PC.
Jeśli z jakiegoś powodu trzeba zminimalizować aplikację lub wysłać go do tła użyć następującego kodu:
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 ** nie daje dostępu do metody 'WindowProc' dla normalnych' Form's, więc jak mogę skorzystać z tej porady? Czy może czegoś tutaj brakuje ... –