private bool WndProc_Window(WinProcMessage msg) { string swParam = null; bool bCallBaseWndProc = true; // si bCallBaseWndProc = true base.WndProc() est appelé //Form parentWindow; switch (msg.wm) { case User.WM.WM_ENDSESSION: string slParam = Win32.Windows.GetEndSessionLParamString((uint)msg.msg.LParam); if (gbTrace) pb.Trace.WriteLine("WinProc Child Window : {0,-20} {1,-20} window {2,-25} hWnd {3} lParam {4}", msg.wm, msg.msg.WParam, msg.form.Text, msg.form.Handle, slParam); break; case User.WM.WM_CLOSE: if (gbTrace) pb.Trace.WriteLine("WinProc Child Window : {0,-20} {1,-20} window {2,-25} hWnd {3}", msg.wm, swParam, msg.form.Text, msg.form.Handle); RemoveWindow(msg.form); ActivateFirstWindow(); break; case User.WM.WM_ACTIVATE: short low = msg.msg.WParam.zGetLowValue(); User.WA wa = Messages.GetWA(low); swParam = wa.ToString(); if (gbTrace) pb.Trace.WriteLine("WinProc Child Window : {0,-20} {1,-20} window {2,-25} hWnd {3}", msg.wm, swParam, msg.form.Text, msg.form.Handle); if (wa == User.WA.WA_CLICKACTIVE || wa == User.WA.WA_ACTIVE) SetFirstWindow(msg.form); break; case User.WM.WM_SYSCOMMAND: User.SC sc = Messages.GetSC((int)msg.msg.WParam); //parentWindow = msg.form.Owner; //if (parentWindow == null) break; if (sc == User.SC.SC_CLOSE) { if (gbTrace) pb.Trace.WriteLine("WinProc Child Window : {0,-20} {1,-20} window {2,-25} hWnd {3} lParam = {4:x} Close window", msg.wm, sc, msg.form.Text, msg.form.Handle, msg.msg.LParam.ToInt32()); if (gbHideWindowWhenClose) { msg.form.Visible = false; bCallBaseWndProc = false; } } else if (sc == User.SC.SC_MINIMIZE) { if (gbTrace) pb.Trace.WriteLine("WinProc Child Window : {0,-20} {1,-20} window {2,-25} hWnd {3} lParam = {4:x} Minimize window", msg.wm, sc, msg.form.Text, msg.form.Handle, msg.msg.LParam.ToInt32()); if (gbMinimizeParentWindowWhenMinimize) { gbDisableSetFirstWindow = true; Point pt = Cursor.Position; //User.SendMessage(parentWindow.Handle, (uint)User.WM.WM_SYSCOMMAND, (IntPtr)User.SC.SC_MINIMIZE, new IntPtr(cu.MakeValue(pt.X, pt.Y))); User.SendMessage(gParentWindow.Form.Handle, (uint)User.WM.WM_SYSCOMMAND, (IntPtr)User.SC.SC_MINIMIZE, new IntPtr(zconvert.MakeValue(pt.X, pt.Y))); bCallBaseWndProc = false; } if (gbHideWindowWhenMinimize) { msg.form.Visible = false; //HideWindow(msg.form); bCallBaseWndProc = false; } } else if (sc == User.SC.SC_RESTORE) { if (gbTrace) pb.Trace.WriteLine("WinProc Child Window : {0,-20} {1,-20} window {2,-25} hWnd {3} lParam = {4:x} Restore window", msg.wm, sc, msg.form.Text, msg.form.Handle, msg.msg.LParam.ToInt32()); //ShowWindow(msg.form); //bCallBaseWndProc = false; } break; case User.WM.WM_SHOWWINDOW: if (gbTrace) pb.Trace.WriteLine("WinProc Child Window : {0,-20} {1,-20} window {2,-25} hWnd {3} lParam = {4:x} Show or hide window", msg.wm, msg.msg.WParam, msg.form.Text, msg.form.Handle, msg.msg.LParam.ToInt32()); if ((int)msg.msg.WParam == 0) // 0 = false { // normalement pas besoin de tester gbHideWindowWhenMinimize // si plus aucune fenetre n'est visible, la fenetre parent est cachée // if (gbHideWindowWhenMinimize) HideParentWindow(msg.form); } else // 1 = true { //gParentWindow.Form.Visible = true; ShowParentWindow(); } break; } return bCallBaseWndProc; }
// Active la 1ère fenêtre fille si la fenêtre mère est activée // Désactive le changement de la 1ère fenêtre pendant SC_RESTORE (gbDisableSetFirstWindow) private bool WndProc_ParentWindow(WinProcMessage msg) { string swParam; bool bCallBaseWndProc = true; // si bCallBaseWndProc = true base.WndProc() est appelé switch (msg.wm) { case User.WM.WM_ENDSESSION: string slParam = Win32.Windows.GetEndSessionLParamString((uint)msg.msg.LParam); if (gbTrace) pb.Trace.WriteLine("WinProc ParentWindow : {0,-20} {1,-20} window {2,-25} hWnd {3} lParam {4}", msg.wm, msg.msg.WParam, msg.form.Text, msg.form.Handle, slParam); if ((int)msg.msg.WParam == 1) { ApplicationExit(); } break; case User.WM.WM_ACTIVATE: short low = msg.msg.WParam.zGetLowValue(); User.WA wa = Messages.GetWA(low); swParam = wa.ToString(); if (gbTrace) pb.Trace.WriteLine("WinProc ParentWindow : {0,-20} {1,-20} window {2,-25} hWnd {3}", msg.wm, swParam, msg.form.Text, msg.form.Handle); if ((wa == User.WA.WA_ACTIVE || wa == User.WA.WA_CLICKACTIVE) && msg.form.WindowState != FormWindowState.Minimized) { Form firstWindow = gOrderedWindows[0]; if (firstWindow != null) { firstWindow.Activate(); //Form.Activate(); } } break; case User.WM.WM_SYSCOMMAND: User.SC sc = Messages.GetSC((int)msg.msg.WParam); if (sc == User.SC.SC_CLOSE) { //if (gbTrace) pb.Trace.WriteLine("WinProc ParentWindow : {0,-20} {1,-20} window {2,-25} hWnd {3} lParam = {4:x} Close window", msg.wm, sc, msg.form.Text, msg.form.Handle, msg.msg.LParam.ToInt32()); ApplicationExit(); } else if (sc == User.SC.SC_MINIMIZE) { if (gbTrace) pb.Trace.WriteLine("WinProc ParentWindow : {0,-20} {1,-20} window {2,-25} hWnd {3} lParam = {4:x} Minimize window", msg.wm, sc, msg.form.Text, msg.form.Handle, msg.msg.LParam.ToInt32()); } else if (sc == User.SC.SC_RESTORE) { gbDisableSetFirstWindow = false; if (gbTrace) pb.Trace.WriteLine("WinProc ParentWindow : {0,-20} {1,-20} window {2,-25} hWnd {3} lParam = {4:x}, Restore window", msg.wm, sc, msg.form.Text, msg.form.Handle, msg.msg.LParam.ToInt32()); } break; } return bCallBaseWndProc; }