c # - Hvordan kan jeg kontrollere, om et vindue er et MDI-vindue?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forestiller mig, at der er noget bruger32.dll-opkald, som jeg kan bruge til at kontrollere, om et vindue er et MDI-vindue, som at bruge DefMDIChildProc og se om det fejler, men jeg spekulerer på, om der er nogen begrænsninger herfor, eller hvis der er en bedre måde at gøre dette på? Kontroller en forælder tilstrækkelig?


For enkelhedens skyld er det, som jeg i sidste ende håber på, en IsMDI (IntPtr ptr) slags opkald ...


Tanker? Forslag?

Bedste reference


Jeg har fundet ud af det (med hjælp fra pinvoke.net) - du kan finde ud af det ud fra de udvidede Windows-stilarter:


        public static bool IsMDI(IntPtr hwnd)
        {
            WINDOWINFO info = new WINDOWINFO();
            info.cbSize = (uint)Marshal.SizeOf(info);
            GetWindowInfo(hwnd, ref info);
            //0x00000040L is the style for WS\_EX\_MDICHILD
            return (info.dwExStyle & 0x00000040L)==1;
        }

        [StructLayout(LayoutKind.Sequential)]
        private struct WINDOWINFO
        {
            public uint cbSize;
            public RECT rcWindow;
            public RECT rcClient;
            public uint dwStyle;
            public uint dwExStyle;
            public uint dwWindowStatus;
            public uint cxWindowBorders;
            public uint cyWindowBorders;
            public ushort atomWindowType;
            public ushort wCreatorVersion;

            public WINDOWINFO(Boolean? filler)
                : this()   // Allows automatic initialization of "cbSize" with "new WINDOWINFO(null/true/false)".
            {
                cbSize = (UInt32)(Marshal.SizeOf(typeof(WINDOWINFO)));
            }

        }

        [return: MarshalAs(UnmanagedType.Bool)]
        [DllImport("user32.dll", SetLastError = true)]
        private static extern bool GetWindowInfo(IntPtr hwnd, ref WINDOWINFO pwi);

Andre referencer 1


Hvis kontrollerne er i din egen .NET-applikation, har formularklassen egenskaber til at arbejde med MDI-vinduer: [2]


Form.IsMdiChild [3]


Form.IsMdiContainer [4]


Form.MdiParent [5]


Form.MdiChildren [6]