将可拖动 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 应用程序即可拥有此行为。
请看这张截图:
如您所见,"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 应用程序即可拥有此行为。