none
Kreuz entfernen durch WINApi nicht dauerhaft aktiv RRS feed

  • Frage

  • Hallo Leute, 

    folgende statische Klasse entfernt das Kreuz am rechten oberen WinForm-Fenster, wie beabsichtigt. Wenn ich die Applikation per Button minimiere, und dann erneut sichtbar mache, ist das Kreuz wieder da. Warum? Wie kann ich es dauerhaft entfernen?

    Hier die WINApi-Klasse

    using System;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;
    
    namespace DPTnPics {
        static public class Win {
            [DllImport("user32.dll")]
            static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
    
            [DllImport("user32.dll")]
            static extern bool EnableMenuItem(IntPtr hMenu, uint uIdEnableItem, uint uEnable);
            internal const UInt32 SC_CLOSE = 0xF060;
            internal const UInt32 MF_BYCOMMAND = 0x00000000;
            internal const UInt32 MF_ENABLED = 0x00000000;
            internal const UInt32 MF_GRAYED = 0x00000001;
            internal const UInt32 MF_DISABLED = 0x00000002;
    
            public static void EnableCloseButton(IWin32Window window, bool bEnabled) {
                IntPtr hSystemMenu = GetSystemMenu(window.Handle, false);
    
                EnableMenuItem(hSystemMenu, SC_CLOSE, (uint) (MF_BYCOMMAND | (bEnabled ? MF_ENABLED : MF_GRAYED | MF_DISABLED)));
            }
        }
    }

    hier der Code bzgl. der Minimierung per Button:

          private void btn_OK_Click(object sender, EventArgs e) {
                this.SetMinimized(false);
                _logger.Debug("Application has been minimized");
            }
            private void SetMinimized(bool blnIsMinimized) {
                if(blnIsMinimized) {
                    this.Hide();
                } else {
                    this.WindowState = System.Windows.Forms.FormWindowState.Minimized;
                    //this.Show();
                    //this.Focus();
                }
    
                this.ShowInTaskbar = !blnIsMinimized;
                Win.EnableCloseButton(this, false); // bringt nix!!
            }

    Hier noch der Konstruktor, der das Kreuz zunächst deaktivert:

            public Main() {
                InitializeComponent();
                //TKipp/31-05-2019/Deaktivert das Close Icon rechts oben(Kreuz)
                Win.EnableCloseButton(this, false);//bringt was!! Das Kreuz wird deaktivert
            }







    • Bearbeitet tklustig Freitag, 31. Mai 2019 16:33
    Freitag, 31. Mai 2019 07:37

Antworten

Alle Antworten