如何检查窗口是否为MDI窗口?

问题描述:

我想有一些user32.dll调用,我可以使用它来验证窗口是否为MDI窗口,就像使用DefMDIChildProc并查看它是否失败一样,但我不知道这是否有任何限制,或者如果有更好的方法做这个?检查父母是否足够?如何检查窗口是否为MDI窗口?

为了简便起见,正是我最终希望的是一个IsMDI(IntPtr的PTR)一种叫......

的思考?建议?

我已经弄明白了(在...的帮助下) 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); 

如果控件在自己的.NET应用程序,该Form class具有性能与MDI窗口的工作:

Form.IsMdiChild

Form.IsMdiContainer

Form.MdiParent

Form.MdiChildren

+0

我试图找出是否对任何正在运行的窗口过程中的任何窗口是一个MDI窗口,我不会用我自己的工作对象。 – AlishahNovin

+0

@AlishahNovin,我希望这不是你的失望 - 惩罚某人不符合你未指定的要求是不公平的。你原来的问题并不清楚,这些窗口不是你的应用程序的一部分。 –