2

DefMDIChildProc を使用して失敗するかどうかを確認するなど、ウィンドウが MDI ウィンドウであるかどうかを確認するために使用できる user32.dll 呼び出しがあると思いますが、これに制限があるかどうか、またはこれを行うためのより良い方法があるかどうか疑問に思います? 親の確認で十分ですか?

簡単にするために、私が最終的に望んでいるのは IsMDI(IntPtr ptr) のような呼び出しです...

考え?提案?

4

2 に答える 2

4

私はそれを理解しました(pinvoke.netの助けを借りて)-拡張Windowsスタイルに基づいて見つけることができます:

        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);
于 2011-08-19T15:30:17.063 に答える
2

コントロールが独自の .NET アプリケーションにある場合、Form クラスには MDI ウィンドウを操作するためのプロパティがあります。

Form.IsMdiChild

Form.IsMdiContainer

Form.MdiParent

Form.MdiChildren

于 2011-08-19T15:13:42.847 に答える