DefMDIChildProc を使用して失敗するかどうかを確認するなど、ウィンドウが MDI ウィンドウであるかどうかを確認するために使用できる user32.dll 呼び出しがあると思いますが、これに制限があるかどうか、またはこれを行うためのより良い方法があるかどうか疑問に思います? 親の確認で十分ですか?
簡単にするために、私が最終的に望んでいるのは IsMDI(IntPtr ptr) のような呼び出しです...
考え?提案?
DefMDIChildProc を使用して失敗するかどうかを確認するなど、ウィンドウが MDI ウィンドウであるかどうかを確認するために使用できる user32.dll 呼び出しがあると思いますが、これに制限があるかどうか、またはこれを行うためのより良い方法があるかどうか疑問に思います? 親の確認で十分ですか?
簡単にするために、私が最終的に望んでいるのは 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 クラスには MDI ウィンドウを操作するためのプロパティがあります。