2011-08-19 60 views
2

我想有一些user32.dll調用,我可以使用它來驗證窗口是否爲MDI窗口,就像使用DefMDIChildProc並查看它是否失敗一樣,但我不知道這是否有任何限制,或者如果有更好的方法做這個?檢查父母是否足夠?如何檢查窗口是否爲MDI窗口?

爲了簡便起見,正是我最終希望的是一個IsMDI(IntPtr的PTR)一種叫......

的思考?建議?

回答

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); 
2

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

Form.IsMdiChild

Form.IsMdiContainer

Form.MdiParent

Form.MdiChildren

+0

我試圖找出是否對任何正在運行的窗口過程中的任何窗口是一個MDI窗口,我不會用我自己的工作對象。 – AlishahNovin

+0

@AlishahNovin,我希望這不是你的失望 - 懲罰某人不符合你未指定的要求是不公平的。你原來的問題並不清楚,這些窗口不是你的應用程序的一部分。 –