将可拖动 child windows 限制在 parent window 内?

Constraining draggable child windows within parent window?

请看这张截图:

如您所见,"Executable modules""Threads" child windows 可以在 sandbox-like "Themida" parent window 中自由漫游,如果他们被拖过边缘就会溢出只是被隐藏起来。我怎样才能创造这种效果?

那是一个 Multiple Document Interface (MDI) 应用程序。包含 window,深灰色背景的是 MDI 客户端 window,里面的 windows 是 MDI 子 windows.

Microsoft 多年来一直不鼓励使用 MDI,因此您可能希望在新的应用程序中使用它时三思。

只需将 window 样式设置为 WS_CHILD,window 将被限制在父客户矩形中。

您可以在 window 创建期间或在使用 SetWindowLongPtr()GetWindowLongPtr() 之后执行此操作:

 SetWindowLongPtr(hwnd, GWL_STYLE, WS_CHILD | GetWindowLongPtr(hwnd, GWL_STYLE));

P.S。您无需创建 MDI 应用程序即可拥有此行为。