我想有一些user32.dll調用,我可以使用它來驗證窗口是否爲MDI窗口,就像使用DefMDIChildProc並查看它是否失敗一樣,但我不知道這是否有任何限制,或者如果有更好的方法做這個?檢查父母是否足夠?如何檢查窗口是否爲MDI窗口?
爲了簡便起見,正是我最終希望的是一個IsMDI(IntPtr的PTR)一種叫......
的思考?建議?
我想有一些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窗口的工作:
我試圖找出是否對任何正在運行的窗口過程中的任何窗口是一個MDI窗口,我不會用我自己的工作對象。 – AlishahNovin
@AlishahNovin,我希望這不是你的失望 - 懲罰某人不符合你未指定的要求是不公平的。你原來的問題並不清楚,這些窗口不是你的應用程序的一部分。 –