Warten auf einen Timer ist eine sehr, sehr schlechte Idee, ganz einfach, es ist eine Heuristik und Sie erraten, wann die Größenänderung durchgeführt wird.
Eine bessere Idee wäre, eine Klasse von WindowsFormsHost
abzuleiten und überschreiben die WndProc
-Methode, Umgang mit der WM_SIZE
Nachricht. Dies ist die Nachricht, die an ein Fenster gesendet wird, wenn die Größenoperation abgeschlossen ist (im Gegensatz zu WM_SIZING
, die während des Prozesses gesendet wird).
Sie können auch die WM_SIZING
Nachricht behandeln, und nicht die Basisimplementierung von WndProc
aufrufen, wenn Sie diese Nachricht erhalten, um zu verhindern, dass die Nachricht verarbeitet wird und die Map sich all diese Male neu zeichnen lässt.
Die Dokumentation für die WndProc
Methode auf der Control
Klasse zeigt, wie WndProc
Methode außer Kraft zu setzen:
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.wndproc(VS.71).aspx
Auch wenn es für eine andere Klasse ist, dann ist es genau das gleiche Haupt.
Darüber hinaus müssen Sie die Werte für den WM_SIZING
und WM_SIZE
Konstanten, die Sie hier finden können:
http://www.pinvoke.net/default.aspx/Enums/WindowsMessages.html
Beachten Sie, dass Sie nicht alles aus dem obigen Link benötigen, nur um die Erklärungen für diese beiden Werte:
/// <summary>
/// The WM_SIZING message is sent to a window that
/// the user is resizing. By processing this message,
/// an application can monitor the size and position
/// of the drag rectangle and, if needed, change its
/// size or position.
/// </summary>
const int WM_SIZING = 0x0214;
/// <summary>
/// The WM_SIZE message is sent to a window after its
/// size has changed.
/// </summary>
const int WM_SIZE = 0x0005;
Ich löschte meine Antwort, ich wollte nicht davon ausgehen, dass Sie den Timer die ganze Zeit laufen sollten. In jedem Fall interessiert mich diese Methode. Irgendwelche Verbindungen oder Proben? – bendewey
pinvoke.net ist dein Freund ... =) –