如何检查窗口是否为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);
我试图找出是否对任何正在运行的窗口过程中的任何窗口是一个MDI窗口,我不会用我自己的工作对象。 – AlishahNovin
@AlishahNovin,我希望这不是你的失望 - 惩罚某人不符合你未指定的要求是不公平的。你原来的问题并不清楚,这些窗口不是你的应用程序的一部分。 –