2011-08-19 5 views
2

나는 window가 DefMDIChildProc을 사용하는 것처럼 보이고 실패했는지 확인하는 데 사용할 수있는 user32.dll 호출이 있다고 상상한다. 그러나 이것에 대한 제한이 있는지, 더 좋은 방법이 있는지 궁금하다. 이 작업을 수행? 학부모가 충분한 지 확인하고 있습니까? 단순화하기 위해창이 MDI 창인지 어떻게 확인할 수 있습니까?

, 나는 궁극적으로 바라고있는 무슨 것은 ...

생각을 호출의 IsMDI (IntPtr입니다 PTR) 종류입니까? 제안? 컨트롤이 자신의 .NET 응용 프로그램에있는 경우

답변

4

I 그걸 알아 냈어. 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

Form class는 MDI 창 작업을위한 속성이 있습니다

Form.IsMdiChild

Form.IsMdiContainer

Form.MdiParent

Form.MdiChildren

+0

실행중인 Window 프로세스의 모든 창이 MDI 창인지 확인하려고합니다. 자체적으로 작업하지 않습니다. 사물. – AlishahNovin

+0

@AlishahNovin, 당신의 다운 다운이 아니길 바래요. 당신이 지정하지 않은 요구 사항을 충족시키지 못해서 누군가를 처벌하는 것은 불공평합니다. 원래 질문에서이 창은 응용 프로그램의 일부가 아니라는 것이 분명했습니다. –

관련 문제