在windows中,如何在父窗口之外创建一个'子'窗口,并且父窗口始终处于事件状态(GetActiveWindow()返回父窗口),就像组合框下拉窗口一样。
最佳答案
我认为这些是尝试这样做的要点:
弹出窗口是顶级窗口,与控件具有相同的父级。 (即弹出窗口不是控件的子窗口。它根本不是子窗口;它是顶层窗口,但没有粗窗口边框等。所以它看起来不像普通的顶层-级别窗口。)这就是它可以扩展到控件边界之外的原因。
当创建弹出窗口时,它使用 ShowWindow(hWndPopup, SW_SHOWNA) 显示,因此它不会占据输入焦点。这可以防止父窗口变为非事件状态。
创建弹出窗口后,您可以使用 SetCapture 捕获鼠标。然后,您可以跟踪鼠标所在的位置,并在鼠标重叠时突出显示弹出窗口中的项目。单击鼠标按钮时,您将对鼠标下方的任何内容进行操作(如果鼠标根本不在其上,则取消弹出窗口)。请记住响应 WM_CAPTURECHANGED,以防其他东西捕获鼠标。完成后记得 ReleaseCapture。
弹出窗口应通过返回 MA_NOACTIVATEANDEAT 来处理 WM_MOUSEACTIVATE。
关于windows - 组合框下拉窗口可以显示在组合框窗口之外,如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4312612/