Laden...

IMessageFilter

Erstellt von mercuer vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.911 Views
M
mercuer Themenstarter:in
79 Beiträge seit 2006
vor 16 Jahren
IMessageFilter

Hallo zusammen,

Ich versuche verzweifelt einen weg zu finden das drücken des minimieren Button in meinem Programm abzufangen. Dabei bin ich auf die MessageFilter gekommen. nun habe ich folgendes Problem: Ich bekomme zwar das Event mit, allerdings nur wenn der User das Form über das Kontext Menü minimiert nicht aber wenn er den minimieren button drückt, gibt es da noch ein anderes Event? ich poste hier mal den Code wie ich es bis hierhin gelöst habe. Übrigens das Minimieren Event bekomme ich über SYSCOMMAND, bei WM_SIZE habe ich bis jetzt noch gar nie etwas mitbekommen...



			if (m.Msg != WM_MOUSEMOVE)
			{
				if (m.Msg == WM_SYSCOMMAND)
				{
					if (m.WParam.ToInt32() == SC_MINIMIZE)
					{
						MinimizButtonPressed(null, null);
					}
				}
				if (m.Msg == WM_SIZE)
				{
					if (m.WParam.ToInt32() == SIZE_MINIMIZED)
					{
						MinimizButtonPressed(null, null);
					}
				}
			}


432 Beiträge seit 2005
vor 16 Jahren

hi mercuer,

beim minimize wird doch das resize ereignis ausgelöst - genügt Dir das nicht?

M
mercuer Themenstarter:in
79 Beiträge seit 2006
vor 16 Jahren

nein eben nicht, ich brauche nämlich den status des Formulars BEVOR es minimiert wird und die einzige Möglichkeit die mir das bietet sind diese Message Filter. Zumindest die einzige die ich bis jetzt gefunden habe X(

B
53 Beiträge seit 2007
vor 16 Jahren

Ich habe die WndProc meiner Form überschrieben und mein Code dafür sieht so aus:


        protected override void WndProc(ref Message m)
        {
            const int SC_MINIMIZE = 0xF020;
            const int SIZE_MINIMIZED = 1;
            const int WM_SYSCOMMAND = 0x112;

            if (m.Msg == WM_SYSCOMMAND)
            {
                if (m.WParam.ToInt32() == SC_MINIMIZE)
                {
                    System.Diagnostics.Debug.WriteLine("Minimized Message: " + this.WindowState.ToString());
                }
            }

            base.WndProc(ref m);
        }

Damit bekomme ich auch beide Events mit. Man kann den MinimizeButton oder das SystemMenü benutzen.

2.921 Beiträge seit 2005
vor 16 Jahren

Hallo Mercuer,

Musst Du unbedingt das event abfangen oder reicht nicht auch in der Form ein MinimizeBox = false?

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.